在什么情况下删除指针

坦巴卡卡

我接下来的问题是关于内存管理的。例如,我有一个不会在类中动态分配的int变量,比如说invar1。我将这个int的内存地址传递给另一个类的构造函数。该类会这样做:

class ex1{
    ex1(int* p_intvar1)
    {
       ptoint = p_intvar1;
    }

    int* ptoint;
};

我应该删除ptoint吗?因为它具有动态分配的int的地址,所以我认为不需要删除它。

再一次使用新的运算符为类声明一个对象:

objtoclass = new ex1();

我将此传递给另一堂课:

class ex2{
    ex2(ex1* p_obj)
    {
       obj = p_obj;
    }

    ex1* obj;
};

已经删除objtoclass时应该删除obj吗?

谢谢!

轨道轻赛

因为它具有动态分配的int的地址,所以我认为不需要删除它。

正确。

已经删除objtoclass时应该删除obj吗?

没有。

回想一下,您实际上并没有删除指针。您正在使用指针删除它们指向的对象。这样,如果您同时编写了delete objdelete objtoclass,因为两个指针都指向同一个对象,则将该对象删除两次。

我会警告您,这是您的ex2很容易犯的错误,在该类中,指向对象的所有权语义并不十分清楚。您可能会考虑使用智能指针实现来消除风险。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在什么情况下,“ this”指针传递给类方法?

指针 vs 引用示例,在什么情况下更好

在什么情况下需要指向 C 中的指针的指针?

在什么情况下,CopyOnWriteArrayList是合适的?

在什么情况下可能需要动态分配指向函数的指针?

什么情况下可能需要使用\需要const指针(非const \ const)数据

在什么情况下,设备的状态将变为禁用或删除

在什么情况下 ChannelPipeline 会删除其所有元素?

应用程序在什么情况下会删除Firebase实例ID?

可以更新/插入/删除视图吗?如果是,在什么情况下?

删除运算符在什么情况下会引发错误?

“tee”在什么情况下会删除它正在写入的文件?

下溢或溢出的指针会发生什么情况?

在什么情况下会调用Parse HTML事件?

Monostate模式会在什么情况下建模?

Fortran在什么情况下输出NaN?

在什么情况下物体不等于自身?

在什么情况下可以使用 mongoexport?

在什么情况下声明实例变量?

在什么情况下可以省略SVG path的命令?

在什么情况下SynchronizedCollection <T> .Remove()返回false?

在什么情况下会推/拉git替换

在什么情况下使用异常处理是可行的?

在什么情况下PDO:execute()会返回false?

在什么情况下此宏会导致错误?

NegativeLiterals在什么情况下会改变行为?

在什么情况下ConcurrentDictionary.TryRemove()返回false?

在什么情况下HTTP_REFERER为空

在什么情况下android设备的UUID会改变?