【发布时间】:2015-11-03 15:02:06
【问题描述】:
有一个boost::noncopyable,我的库中有自己的不可复制类。在最新的 C++ 标准中是否存在 std::noncopyable 或等效项?
这是一件小事,但从这样一个类派生出来的意图更加清晰。
【问题讨论】:
标签: c++ standard-library
有一个boost::noncopyable,我的库中有自己的不可复制类。在最新的 C++ 标准中是否存在 std::noncopyable 或等效项?
这是一件小事,但从这样一个类派生出来的意图更加清晰。
【问题讨论】:
标签: c++ standard-library
不,因为有一种标准方法可以使类不可复制:
class MyClass
{
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
}:
但是,不可复制的类可以通过重载 MyClass&& 的构造函数来移动。
使类不可复制的声明(上)可以在公共或私有部分。
如果您真的不想每次都输入所有内容,您可以随时定义一个宏,例如:
#define NONCOPYABLE(Type) Type(const Type&)=delete; Type& operator=(const Type&)=delete
class MyClass
{
NONCOPYABLE(MyClass);
// etc.
};
【讨论】:
boost::noncopyable 不会让您将一个实例复制分配给另一个
我相信你已经通过阅读 CashCow 的帖子想通了,但我想我不妨为不可复制的类提供一个基类。
class Noncopyable {
public:
Noncopyable() = default;
~Noncopyable() = default;
private:
Noncopyable(const Noncopyable&) = delete;
Noncopyable& operator=(const Noncopyable&) = delete;
};
【讨论】:
protected,因为直接实例化Noncopyable的对象是没有意义的,只是(名义上)作为一些派生的、实际有用的类型的基类.