gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:37:04 33 4
gpt4 key购买 nike

当我在写一个类时(比如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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com