众划算网站开发,网站导航这么做,保定网站设计推荐,济南网站建设公司大全有些场景我们不需要编译器默认实现的构造函数#xff0c;拷贝构造函数#xff0c;赋值函数#xff0c;这时候我们应该明确的告诉编译器#xff0c;我们不需要#xff0c;一个可行的方法是将拷贝构造函数和赋值函数声明为private。
class HomeForSale { ... };
HomeForSal… 有些场景我们不需要编译器默认实现的构造函数拷贝构造函数赋值函数这时候我们应该明确的告诉编译器我们不需要一个可行的方法是将拷贝构造函数和赋值函数声明为private。
class HomeForSale { ... };
HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1); // 试图拷贝h1应该阻止编译通过
h1 h2; // 试图拷贝h2应该阻止编译通过每一栋房子都不同这样的拷贝不应该支持。 但是这样也会存在一个问题因为成员函数和友元函数仍然可以调用私有函数。
class HomeForSale {
public:...
private:...HomeForSale(const HomeForSale); // 只有声明不提供定义HomeForSale operator(const HomeForSale);
};我们可以使用上面的类定义编译器将阻止客户端拷贝HomeForSale对象的尝试如果无意中试图在成员函数或友元函数中这样做链接器将会报错。
class Uncopyable {
protected: // 允许派生类对象的构造和析构Uncopyable() {} ~Uncopyable() {}
private:Uncopyable(const Uncopyable); // ...但不允许拷贝Uncopyable operator(const Uncopyable);
};
class HomeForSale : private Uncopyable { //不再声明拷贝构造函数或拷贝赋值运算符
…
};在c11的标准中我们可以使用delete来删除函数这样在编译的时候就会提示错误。 要禁用编译器自动提供的功能请将相应的成员函数声明为private并且不提供任何实现。使用像Uncopyable这样的基类是一种方法。