这可能是一个愚蠢的问题,但我不确定这样做的正确方法是什么(搜索没有为我提供明确的答案)。
考虑以下代码段:
class D;
class C
{
C() {m_Ptr = new D;};
~C() {delete m_Ptr;};
public:
void setPtr(const D &obj) {*m_Ptr = obj};
private:
D *m_Ptr;
};
是否可以简单地为 *m_Ptr 分配新值,即使它已经指向 D 类的不同对象?我倾向于使用:
void C::setPtr(const D &obj)
{
delete m_Ptr;
*m_Ptr = obj;
}
但我不确定这是必要的还是好的/坏的做法。我的理由是每个"new"都应该有它的“删除”(或其他释放内存的方法,例如 Qt 中的父子机制)。
感谢您的澄清!
最佳答案
如果您重新分配指针,您可能需要执行delete
。在你的情况下你不这样做,你只是改变指针指向的数据。
事实上,做例如
delete m_Ptr;
*m_Ptr = obj;
会导致未定义的行为,因为您在释放指针指向的内存后取消对指针的引用,然后写入您不再“拥有”的内存。
关于c++ - 在分配不同的值之前是否有必要在指针上使用 'delete'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653636/