是否有 std::noncopyable(或等同物)?
Is there a std::noncopyable (or equivalent)?
有一本 boost::noncopyable,我的图书馆里有我自己的不可复制的 class。最新的 C++ 标准中是否有 std::noncopyable 或等价物?
这是一件小事,但从这样一个 class 中推导出来会使意图更加清晰。
不,因为有一种标准方法可以使 class 不可复制:
class MyClass
{
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
}:
不可复制的 class 可以通过从 MyClass&&
.
重载构造函数来使其可移动
使 class 不可复制(以上)的声明可以在 public 或私有部分中。
如果您真的不想每次都输入所有内容,您可以随时定义一个宏,例如:
#define NONCOPYABLE(Type) Type(const Type&)=delete; Type& operator=(const Type&)=delete
class MyClass
{
NONCOPYABLE(MyClass);
// etc.
};
我相信你已经通过阅读 CashCow 的 post 弄明白了,但我想我也可以为不可复制的 classes 提供一个基础 class。
class Noncopyable {
public:
Noncopyable() = default;
~Noncopyable() = default;
private:
Noncopyable(const Noncopyable&) = delete;
Noncopyable& operator=(const Noncopyable&) = delete;
};
有一本 boost::noncopyable,我的图书馆里有我自己的不可复制的 class。最新的 C++ 标准中是否有 std::noncopyable 或等价物?
这是一件小事,但从这样一个 class 中推导出来会使意图更加清晰。
不,因为有一种标准方法可以使 class 不可复制:
class MyClass
{
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
}:
不可复制的 class 可以通过从 MyClass&&
.
使 class 不可复制(以上)的声明可以在 public 或私有部分中。
如果您真的不想每次都输入所有内容,您可以随时定义一个宏,例如:
#define NONCOPYABLE(Type) Type(const Type&)=delete; Type& operator=(const Type&)=delete
class MyClass
{
NONCOPYABLE(MyClass);
// etc.
};
我相信你已经通过阅读 CashCow 的 post 弄明白了,但我想我也可以为不可复制的 classes 提供一个基础 class。
class Noncopyable {
public:
Noncopyable() = default;
~Noncopyable() = default;
private:
Noncopyable(const Noncopyable&) = delete;
Noncopyable& operator=(const Noncopyable&) = delete;
};