dar*_*613 2 c++ memory-management new-operator
假设我正在创建类Foo的新对象,它将类Bar的对象作为构造函数参数.如果我以这种方式创建此对象:
Foo myObj(new Bar());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,新对象会发生什么?我见过类似于这个例子的代码(没有为作为参数创建的新对象的名称).我将把我的delete调用放在哪里以释放Bar对象占用的内存?
这取决于,如果像你的例子那样分配,希望你的Foo班级管理它,否则Bar将泄露
class Foo
{
public:
Foo(Bar* bar) : m_bar{bar} {}
~Foo() { delete m_bar; }
private:
Bar* m_bar;
};
Run Code Online (Sandbox Code Playgroud)
或者,如果您可以访问C++ 11,那么您可以拥有 std::unique_ptr
class Foo
{
public:
Foo(Bar* bar) : m_bar{bar} {}
private:
std::unique_ptr<Bar> m_bar;
};
Run Code Online (Sandbox Code Playgroud)