【问题标题】:C++ assigning pointer to another pointer locally in a function - undefined behaviour?C ++在函数中将指针分配给本地另一个指针-未定义的行为?
【发布时间】:2021-12-30 11:02:40
【问题描述】:

我的问题与将指针分配给另一个指针有关。在下面的代码中的方法next_schedulable_operation()。成员变量candidates_ 具有mlir::Operation* 类型的元素。我有一个迭代器op_itr 指向candidates_ 中的一个元素。在从candidates_ 中删除元素之前,我使用代码行mlir::Operation* op = *op_itr; 制作了指针(?)的本地副本

然后在最后一行,我将局部变量分配给成员变量schedulable_op_schedulable_op_ = op;

这会导致未定义的行为吗?我不能使用对象mlir::Operation,因为它说析构函数是私有的。

error: ‘mlir::Operation::~Operation()’ is private within this context

代码

【问题讨论】:

  • 除非取消引用或删除,指针只是数字。例如,您复制了建筑物的地址卡,并销毁了原始地址卡,只要建筑物仍然存在,复制的地址卡就仍然有效。

标签: c++ pointers


【解决方案1】:

不,这不是未定义的行为。

op 的初始化会将指针值复制出列表。随后的erase 调用将删除列表节点。这将调用 mlir::Operation * 的析构函数,因为它是一个原始指针,所以什么都不做。无论该节点的指针指向什么,它仍然存在。

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2015-11-25
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多