欢迎光临散文网 会员登陆 & 注册

【读书笔记】EffectiveC++ 2.构造/析构/赋值运算

2023-08-20 11:15 作者:艾丝_芙涅珂丝  | 我要投稿

规则5 了解c++默默编写并调用哪些函数

在什么都不声明的情况下。编译器可以为class自动创建default构造函数,而一旦你自己编写了构造函数,它将不会生成。如果你希望你的class作为基类存在或需要被某些容器装载,你需要手动增加一行 =default的构造函数。

如果不声明,编译器会自动提供copy构造函数和copy assignment操作符,但只能完成相对简单的赋值操作。

规则6 若不想使用编译器自动生成的函数,就该明确拒绝

接上文,编译器默认自动提供copy构造函数和copy assignment操作符,并将其声明为public。如果你不希望这样做,你可以手动提供一份private的copy构造函数和copy assignment操作符,这已经可以避免绝大多数情况下对于构造的错误调用。但如果你希望成员函数和友员函数、也不这么做,就需要创建一个专门的基类来做上面的行为,然后让你的类继承它。

规则7 为多态基类声明virtual析构函数

假如多态基类没有virtual析构函数,那么当你使用基类指针指向派生对象,并试图使用这个指针删除该对象时,派生类的析构函数将不会被调用。

规则8 别让异常逃离析构函数

析构函数中抛出异常会导致剩下的资源的没有被正确释放

规则9 绝不在构造和析构过程中调用virtual函数

因为此时调用的是基类的该virtual函数,而非你想要使用的派生类中的函数。

规则10 令operator=返回一个reference to *this 

使用return *this 这是一个协议

规则11 在operator=中处理自我赋值

可以使用证同测试(this==&input) 

总之需要保证可能需要同时操作两个相同对象的函数不出现问题

规则12 复制对象时勿忘其每一个成分

如果自己重新书写copy构造函数,那么记得确认是否真的复制了对象中的每个成员,因为编译器不会对其做任何检测。


【读书笔记】EffectiveC++ 2.构造/析构/赋值运算的评论 (共 条)

分享到微博请遵守国家法律