我想知道何时或是否必须删除此对象。这是一个基本类 Object Object.cpp 的构造函数:
Objects::Objects{
Obj one = new Obj;
Obj two = new Obj;
}
我知道在分配内存时应该在某个时候将其删除,但是我已经在构造函数中分配了内存并且想再次使用变量一和二。我什么时候删除它们?
我想知道何时或是否必须删除此对象。这是一个基本类 Object Object.cpp 的构造函数:
Objects::Objects{
Obj one = new Obj;
Obj two = new Obj;
}
我知道在分配内存时应该在某个时候将其删除,但是我已经在构造函数中分配了内存并且想再次使用变量一和二。我什么时候删除它们?
为简单起见,无论何时制作new
,都应该制作相应的delete
。
在您的情况下,您必须Obj
最迟在删除对象之前删除分配的对象Objects
,这意味着在destructor
of 中Objects
,这也意味着您必须保留一种访问析构函数中的one
和two
指针的方法(一种方法可能是使他们成为Objects
) 的成员。您当前的情况未能这样做,因为one
andtwo
是局部变量而不是指针。
它可能如下所示:
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];
};