我想知道何时或是否必须删除此对象。下面是一个基本类对象Object.cpp的构造函数:
Objects::Objects{
Obj one = new Obj;
Obj two = new Obj;
}
我知道在分配内存时,你应该在某个时候删除它,但是我在构造函数中分配了内存,并且想再次使用变量1和2,我什么时候删除它们?
为了简单起见,任何时候创建new
时,都应该创建相应的delete
。
在您的情况下,您必须最迟在删除您的对象obj
之前删除已分配的对象object
,这意味着在objects
的析构函数
中,这也意味着您必须保留一种方法来访问析构函数处的一个
和两个
指针(一种方法可能是使它们成为objects
的成员)。您当前的案例无法这样做,因为One
和Two
是局部变量,而不是指针。
可能如下所示:
class Objects
{
public:
Objects();
virtual ~Objects();
private:
Obj* one;
Obj* two;
};
Objects::Objects{
one = new Obj;
two = new Obj;
}
Objects::~Objects{
delete one;
delete two;
}
在处理资源管理时,您需要注意一些规则,这是三/五/零规则,它将指导您在资源管理方面创建健壮的代码。
另一个说明:使用智能指针可能更好,因为即使使用我在文章中提到的方法,如果在代码执行delete
行之前发生了异常或崩溃,您仍然会出现内存泄漏,正如这里所解释的
我想知道何时或是否必须删除此对象。
如果使用new
分配而不释放,则会泄漏内存。
我已经在构造函数中分配了内存,想再次使用变量一和两,我什么时候删除它们?
如果您想在构造函数中初始化变量并在以后使用它们,那么您应该在构造函数中使用非静态成员变量而不是自动变量。
如果您要在构造函数中分配内存,并用一个成员指向它,那么通常您应该在析构函数中释放内存。有关更多信息,请参见资源获取是初始化习惯用法。但是,您不应该使用裸露的拥有指针,也不应该不必要地使用动态分配。下面是一个简单的示例,我推荐您作为第一个选项:
struct Objects {
Obj objects[2];
};