如何解决分配内存 - 指针
我想知道何时或是否必须删除此对象。 这是一个基本类 Object 的构造函数 对象.cpp:
Objects::Objects{
Obj one = new Obj;
Obj two = new Obj;
}
我知道在分配内存时您应该在某个时候删除它,但是我已经在构造函数中分配了内存并想再次使用变量一和二。我什么时候删除它们?
解决方法
为简单起见,无论何时生成 new
,都应生成相应的 delete
。
在您的情况下,您必须最迟在删除对象 Obj
之前删除分配的对象 Objects
,这意味着在 destructor
的 Objects
中,这也意味着您必须保留一种方法来访问析构函数处的 one
和 two
指针(一种方法可能是使它们成为 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;
}
在处理资源管理时,您需要注意一些规则,rule of three/five/zero 将指导您在资源管理方面创建健壮的代码。
另外一句话:
使用 smart pointers 可能会更好,即使使用我在帖子中提到的方法,如果在您的代码执行 delete
行之前发生异常或崩溃,您仍然会出现内存泄漏,如解释here
我想知道何时或是否必须删除此对象。
如果你用 new
分配而不释放,那么你会泄漏内存。
我已经在构造函数中分配了内存,想再次使用变量一和二,我什么时候删除它们?
如果你想在构造函数中初始化变量并在以后使用它们,那么你应该在构造函数中使用非静态成员变量而不是自动变量。
如果你要在构造函数中分配内存,并用一个成员指向它,那么通常你应该在析构函数中释放内存。有关更多信息,请参阅资源获取即初始化习语。但是,您不应该使用裸拥有指针,也不应该不必要地使用动态分配。这是我推荐作为您的首选的一个简单示例:
struct Objects {
Obj objects[2];
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。