问题:我可以定义一个赋值运算符而不是复制构造函数吗?对于内部类(未暴露在 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/