gpt4 book ai didi

c++ - 在头文件中将变量声明为指针和非指针的区别

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:56 26 4
gpt4 key购买 nike

在头文件中将变量声明为指针或非指针有什么区别?我不确定我是否正确理解了差异。

例如

class MyClass {

private:
MyOtherClass* moc; // pointer
MyOtherClass moc2; // no pointer
}

到目前为止,在将变量声明为指针时,我得出了以下优点/缺点。

优点:

  • 惰性实例化(不立即创建对象)
  • 变量存在于比栈大得多的堆上
  • 不仅可以使用默认构造函数

缺点:

  • 必须在析构函数中手动删除(顺便说一句,这样的非指针变量什么时候析构?程序结束时?)

还有什么好说的?

最佳答案

拥有一个对象意味着所有权。这是组合。指针可以表示所有权,但大多数时候它们表示聚合

MyClass 有一个 moc2 并使用 moc

在做出决定时考虑类的设计以及它们之间的交互方式,而不是基于指针与对象的争论。每个 MyClass 对象都有自己的 moc2 成员,但是多个 MyClass 对象可以在它们之间共享一个 moc

关于您提出的优点/缺点:

优点:

  • 惰性实例化(不立即创建对象)- 指针本身已初始化 - 请记住您的成员是指针而不是对象。但我会告诉你,你有时需要这个,尽管大多数时候它是一种代码气味。
  • 变量存在于比栈大得多的堆上——不一定——你也可以有一个指向基于栈的变量的指针。此外,如果在堆上分配了 MyClass 对象,moc2 也会分配。
  • 不仅可以使用默认构造函数 - 没问题,在这两种情况下您都可以使用任何构造函数(请参阅初始化列表)。

缺点:

  • 必须在析构函数中手动删除(顺便说一句。这样的非指针变量何时被析构?程序何时结束?) - 仅当 MyClass 拥有该成员时 - 它可能是指向在别处创建的某个对象的指针,因此 MyClass 不负责管理它。

关于c++ - 在头文件中将变量声明为指针和非指针的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com