c++ - 禁用编译器生成的复制赋值运算符

标签 c++ class copy

当我在写一个类时(比如class nocopy),是否可以完全阻止复制操作符的存在?如果我没有定义一个,而其他人写了类似的东西

nocopy A;
nocopy B;
A = B;

编译器会自动生成一个定义。如果我自己定义一个,我会阻止编译器自动生成,但上面的代码仍然是合法的。

我希望上面的代码是非法的,并产生一个编译时错误。我该怎么做?

最佳答案

你只是用 private 访问说明符声明了一个复制构造函数,甚至没有定义它。
任何尝试使用它的人都会得到一个编译错误,因为它被声明为 private

如果有人间接使用它,你会得到一个链接错误。

在 C++03 中你不能做更多的事情。

但是,在 C++11 中,您可以 Explicitly delete special member functions

例如:

struct NonCopyable {
    NonCopyable & operator=(const NonCopyable&) = delete;
    NonCopyable(const NonCopyable&) = delete;
    NonCopyable() = default;
};

关于c++ - 禁用编译器生成的复制赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823845/

相关文章:

class - MVC 5 - Controller 处置方法

android - 如何在Android中复制大文件?

android - 将数据库从服务器复制到 Android

c++ - Visual Studio C++ "Automatically format completed block on }"

c++ - QVector::remove(int i, int count) 从第一个移除时的性能

swift - 类声明和使用

将字符串中的一个字母复制到另一个字符串中

c++ - 计算字符串中的单词

c++,析构函数有问题

Python;类实例