没有复制构造函数的 C++ 赋值运算符

标签 c++ qt copy-constructor assignment-operator qobject

问题:我可以定义一个赋值运算符而不是复制构造函数吗?对于内部类(未暴露在 API 中),这仍然是一种糟糕的设计实践吗?

我需要它的原因:因为this question提到,QObject 将其复制构造函数和赋值运算符设为私有(private),这样如果子类尝试使用其中任何一个,就会在编译时发出错误。

但是我需要定义一个赋值运算符,以便复制“值”(而不是 the Qobject documentation 描述的“身份”。我没有在任何地方使用此类的复制构造函数。

我不想编写复制构造函数的原因是它会复制我无论如何都不会使用的代码。

最佳答案

没有什么能阻止你。然而,这是一个非常愚蠢的想法。

T t = GetSomeT();

对比

T t;
t = GetSomeT();

将第一个转换为第二个非常简单,但你只是在浪费我的时间,无论是开发人员还是处理器,让我去做。如果它不是默认构造的,我想它会更难......但我仍然没有看到这一点。复制构造函数可以由编译器定义,如果它是微不足道的,或者如果你想要 DRY,你甚至可以根据赋值运算符来定义它。

class T {
    T(const T& ref) {
         *this = ref;
    }
};

没有复制构造函数也会抑制 copy-and-swap 的能力,这是实现赋值运算符的常用习惯。

关于没有复制构造函数的 C++ 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802617/

相关文章:

c++ - 比较字符串不区分大小写的简单方法是什么?

c++ - QListWidget 中的项目在重新排序后变得不可见

c++ - Qt在不在主类中的函数中执行SQL命令

android - 即使焦点设置为 true,后退键导航也不起作用

c++ - 如果有一个带有通用单个参数的模板构造函数,为什么我必须有一个复制构造函数?

c++ - 构造函数和 operator= 具有动态内存分配

c++ - 为什么 C++ 编译器在类具有引用成员时不删除复制构造函数?

C++ 实现正则表达式映射

python - 具有精确的移动距离和方向变化如何填充OpenCV透视变换矩阵(disparity-to-depth)?

c++ - 如何使对话框可移动?