c++ - 哪些情况下要删除指针

标签 c++

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

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

    int* ptoint;
};

我应该删除 ptoint 吗?因为它有一个非动态分配的int的地址,我想我不需要删除它。

我再次使用 new 运算符向类声明一个对象:

objtoclass = new ex1();

然后我将它传递给另一个类:

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

    ex1* obj;
};

当我已经在删除 objtoclass 时是否应该删除 obj?

谢谢!

最佳答案

Because it has the address of an undynamically allocated int I thought I don't need to delete it.

正确。

Should I delete obj when I'm already deleting objtoclass?

没有。

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

我要提醒你,这是你的 ex2 类很容易犯的错误,其中指向对象的所有权语义并不完全清楚。您可以考虑使用智能指针实现来消除风险。

关于c++ - 哪些情况下要删除指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780400/

相关文章:

c++ - 无法更改位于另一个窗口内的窗口的背景颜色

c++ - 从展平的 3D 数组计算 3D 坐标

c++ - 此错误 :"C6262: Function uses ' 160000062 0' bytes of stack: exceeds/analyze:stacksize ' 1638 4'. Consider moving some data to heap"

c++ - `static_assert` 和构造函数中的顺序或错误

c++ - 生成列表的幂集

c++ - 双变量 字符变量

C++虚拟表查找 - 它如何搜索和替换

c++ - 图形驱动程序会导致我的应用程序发生内存泄漏吗?

c++ - Boost::C++ 数据复制的信号

字符串匹配alg的c++实现