例如,我想声明一个类,但是我希望客户端不能使用复制构造函数(或复制赋值运算符)

以下两个都不允许使用复制构造函数:

1.

class Track
{
public:
  Track(){};
  ~Track(){};
private:
  Track(const Track&){};
};

2.
class Track
{
public:
  Track(){};
  ~Track(){};
  Track(const Track&)=delete;
};

这些方法中的一种是否比另一种“更正确”或相等?有副作用吗?
//Does not compile with both the above ways
int main()
{
  Track l;
  Track p(l);
}

最佳答案

使其私有(private)化是“旧的”方式。构造函数仍然存在,但是它是私有(private)的,并且只能从另一个类成员函数中调用。
= delete删除构造函数。它不是由编译器生成的,它将根本不存在。

因此,最有可能的就是= delete。 (尽管要注意的是,并非所有编译器都支持此语法,所以如果要考虑可移植性...)

关于c++ - 声明构造函数私有(private)和= delete有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16758234/

10-12 03:51