我接下来的问题是关于内存管理的。例如,我有一个不会在类中动态分配的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 obj
和delete objtoclass
,因为两个指针都指向同一个对象,则将该对象删除两次。
我会警告您,这是您的ex2
类很容易犯的错误,在该类中,指向对象的所有权语义并不十分清楚。您可能会考虑使用智能指针实现来消除风险。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句