5:了解C++默默编写并调用哪些函数
1 当创建空类时,编译器就会为它创建一个copy构造函数、一个copy assignment操作符和一个析构函数
此外,如果没有声明构造函数的话,编译器会为我们生成一个default构造函数
例:
class Empty { };
实际:
class Empty
{
public:
Empty() { ... }
Empty(const Empy& ths) { ... }
~Empty() { ... }
Empty& operator= (const Empty& rhs) { ... }
};
2 当类内含有 const 或者 reference 成员变量时,调用编译器生成的 copy assignment操作符失败,需自定义=操作符
3 当基类的copy assignment 不可调用或者为private时,无法调用子类的copy assignment操作符
6:若不想使用编译器自动生成的函数,就该明确拒绝
讲相应的函数声明成private,并不予实现
Uncopyable 类使用:
class Uncopyable{
protected:
Uncopyable() { }
~Uncopyable() { }
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
把类从Uncopyable类继承,由于基类Uncopyable的copy构造和 copy assignment 都为private,迫使子类调用这2个函数不成功,从而达到不能copy 的效果
本文详细介绍了在C++中创建空类时编译器自动生成的默认构造函数、复制构造函数、赋值运算符以及它们的用法。特别强调了当类内包含const或reference成员变量时,需自定义赋值运算符以避免调用编译器生成的版本。同时,通过Uncopyable类展示了如何阻止对象的复制。
2482

被折叠的 条评论
为什么被折叠?



