指针成员:

好处:

  1 类占内存较小

  2 可以不包含头文件,使用前置声明

  3 可以不指定具体实现,使用父类指针

坏处:

  手动管理内存,需要指定拷贝构造,赋值构造,析构函数

 

非指针成员:

 好处:

  1 不需要管内存

 坏处

  1 不能使用前置声明

  2 类实例占内存大

  3 只能明确实现

       4 需要在构造方法里调用成员变量的构造函数

 

三法则

有时您需要实现一个管理资源的类。(永远不要在一个类中管理多个资源,这只会导致痛苦。)在这种情况下,请记住以下三个规则

如果你需要明确声明析构 拷贝构造 赋值构造函数.那么你可能需要明确声明这三个

五法则

c++11 增加了移动构造函数和移动赋值构造函数与以上同理

 

class C {
  C(const C&) = default;               // Copy constructor
  C(C&&) = default;                    // Move constructor
  C& operator=(const C&) = default;  // Copy assignment operator
  C& operator=(C&&) = default;       // Move assignment operator
  virtual ~C() { }                     // Destructor
};

结论:

一般不需要自己管理资源

不使用指针成员,就不会用到这些法则

 

 

ref:

https://stackoverflow.com/questions/8589739/pointer-vs-non-pointer-members-of-a-class

https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three

 

相关文章:

  • 2022-01-02
  • 2021-07-30
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2021-11-24
  • 2021-05-31
  • 2021-06-26
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2020-04-23
相关资源
相似解决方案