构造/析构/赋值运算

  • 了解C++默默编写并调用哪些函数
  1. 编译器会默默编写构造函数,拷贝构造,拷贝赋值,析构函数
  2. 有自己的构造函数,编译器不会给出默认构造函数
  3. 内含const和引用成员,或者某个base class将copy assignment 声明为private,编译器会拒绝给出拷贝赋值函数
  • 若不想使用编译器自动生成的函数,就该明确拒绝
  1. 如果不想要拷贝构造动作,可将该函数声明为private并且不予实现,但如果你在member 函数或 friend函数之内调用它,linker会发出抱怨。或者继承uncopyable这种将拷贝动作设为private的base class。
  • 为多态基类声明virtual析构函数
  1. 为多态基类声明virtual析构函数
  2. 不要尝试继承STL的容器,标准容器不含任何virtual函数
  3. 抽象类常被当作base class来用,有时候令其带一个pure virtual析构函数,可能颇为便利。
  • 别让异常逃离析构函数
  1. 析构函数绝对不要吐出异常,如果一个被析构调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们或者结束程序
  • 绝不在构造和析构过程中调用virtual函数
  1. 因为这类调用从不下降到derived层。
  • 令operator= 返回一个 reference to *this
  • 在 operator= 中处理自我赋值
  1. “拷贝并交换”,很精彩的设计。
  • 复制对象时勿忘其每一个成分
  1. 如果你为class添加一个成员变量,你必须同时修改copying函数。如果你忘记了,编译器可不会提醒。
  2. 请确保:复制所有local成员变量;调用base class内适当的copying函数。
posted @   stu--wy  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示