【发布时间】:2018-01-20 22:15:43
【问题描述】:
我是相当新的 C++,所以我可能没有使用正确的术语。这就是我想要做的事情。
我有 Foo 和 Bar 的课程。
我想创建一个Foo 的实例。
那么我想创建一个Bar 的实例并将Foo 实例传递给Bar 的构造函数,这样Bar 现在就拥有Foo 的生命周期。这样,当调用 Bar's 析构函数时,它将/应该取消分配 Foo 实例。
另外,我想让Foo 和Bar 的用户清楚地看到(使用正确的C++ 语义)Bar 拥有Foo 实例。
我也愿意接受任何建议/最佳实践建议。
这是我的尝试。我感觉不对的是 Bar 的析构函数中的 delete &m_foo;。我也不明白:m_foo(foo) 在 Bar 的 ctor 中到底在做什么(以及它到底叫什么——我该怎么说?)。我原以为在构造函数中进行赋值是正确的。
class Foo
{
public:
Foo();
~Foo();
private:
};
Foo::Foo()
{
}
Foo::~Foo()
{
}
class Bar
{
public:
Bar(Foo & foo);
~Bar();
private:
Foo & m_foo;
};
Bar::Bar(Foo & foo)
:m_foo(foo)
{
}
Bar::~Bar()
{
delete &m_foo;
}
这是我想使用它的方式
int main()
{
auto foo = new Foo();
auto bar = new Bar(*foo);
delete bar;
return 0;
}
【问题讨论】:
标签: c++11 pass-by-reference delete-operator