我的以下问题是关于内存管理的。例如,我有一个未在类中动态分配的 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 obj
和 delete objtoclass
,因为两个指针都指向同一个对象,您将删除该对象两次。
我要提醒你,这是你的 ex2
类很容易犯的错误,其中指向对象的所有权语义并不完全清楚。您可以考虑使用智能指针实现来消除风险。
关于c++ - 哪些情况下要删除指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780400/