gpt4 book ai didi

C++ 是否应该在设置新对象时销毁对象中的旧对象?

转载 作者:行者123 更新时间:2023-11-30 00:38:35 25 4
gpt4 key购买 nike

考虑以下类声明:

#include "classB.h"
class A {
private:
B *prop;

public:
A() { /* does stuff to set up B as a pointer to a new B */
setB(const B& bar) { /* store a copy of B */
// how do I manage the old *prop?
*prop = new B(bar);
}
};

setB()中应该如何管理内存分配?我应该删除旧的 *prop 吗?如果是这样,我是否要取消引用然后 delete

最佳答案

首先,您必须在构造函数中将prop 设置为NULL,否则如果您尝试删除 它会出现未定义的行为.

其次,您不取消引用,您只是分配指针。

第三,你应该在析构函数中删除内存,这样你就不会发生泄漏。

最后,如果你实现了析构函数,你还应该有一个复制构造函数和一个赋值运算符。

class A {
private:
B *prop;

public:
//set prop to NULL so you don't run into undefined behavior
//otherwise, it's a dangling pointer
A() { prop = NULL; }

//when you set a new B, delete the old one
setB(const B& bar) {
delete prop;
prop = new B(bar);
}

//delete prop in destructor
~A() { delete prop; }

//because you now have a destructor
//implement the following to obey the rule of three
A& operator = (const A& other); //assignment operator
A(const A& other); //copy constructor
};

关于C++ 是否应该在设置新对象时销毁对象中的旧对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com