【发布时间】:2016-10-19 15:40:17
【问题描述】:
在 C++11 之前,我会实现一个类 Foo,其中包含基类 Bar 的多态对象:
struct Foo {
Bar* m_b;
Foo(Bar* b) : m_b(b) {}
};
按照 Scott Meyer 关于原始指针不好的建议,我想以 C++11 的方式实现 Foo,但我不知道这会是什么样子。
我开始写它像
struct Foo {
std::unique_ptr<Bar> m_b;
Foo(std::unique_ptr<Bar> b) : m_b(std::move(b)) {}
};
但这有一个缺点,b 必须动态分配。
那么 C++11 实现包含多态对象的类的方法是什么?
【问题讨论】:
-
Foo实例是否拥有其m_b指向的Bar的所有权? -
@user2357112 是的,(虽然我也有兴趣处理 No case)
-
您为什么认为
Bar是多态的这一事实与此相关? -
@user695652:如果
Foo拥有其Bar的所有权,您的原始代码将泄露Bar对象。你会怎么处理呢? -
@user695652:智能指针用于表达所有权。在使用智能指针的代码库中,裸指针表示缺乏所有权。
标签: c++11 polymorphism smart-pointers