【发布时间】:2018-03-22 06:38:01
【问题描述】:
我有课
class A {
public:
A(int x): x_(x) {}
void SetValue(int m) {x_=m};
private:
DISALLOW_COPY_AND_ASSIGN(A);
};
我正在尝试创建 A 类型对象的向量
vector<std::unique_ptr<A>> objects;
objects.reserve(10);
for (int i = 0; i < 10; i++) {
auto a = MakeUnique<A>();
a->SetValue(20);
objects.emplace_back(a);
}
这会导致调用 'std::unique_ptr<A, std::default_delete<A> >' 的已删除构造函数的编译错误
【问题讨论】:
-
DISALLOW_COPY_AND_ASSIGN(A)不应是定义复制 ctor 和分配运算符的宏,它应该是一个基类,将复制和分配运算符标记为已删除,并默认移动操作。 -
@GuillaumeRacicot,虽然我总是从 boost noncopyable 驱动,但我看不到你的断言/公理在宏之上的优势
标签: c++ c++11 unique-ptr noncopyable