【发布时间】:2014-08-07 09:11:21
【问题描述】:
在头文件中将变量声明为指针或非指针有什么区别?我不确定我是否正确理解了这些差异。
例如
class MyClass {
private:
MyOtherClass* moc; // pointer
MyOtherClass moc2; // no pointer
}
到目前为止,我在将变量声明为指针时提出了以下优点/缺点。
优点:
- 延迟实例化(不立即创建对象)
- 变量位于比堆栈大得多的堆上
- 不仅可以使用默认构造函数
缺点:
- 必须在析构函数中手动删除(顺便说一句,这样的非指针变量何时被销毁?程序何时结束?)
还有什么要说的?
【问题讨论】:
-
另一个问题是,如果不是指针,您将需要在标题中完整定义 MyOtherClass,而如果它是指针,您可以转发声明该类并将标题包含在 cpp 中
-
您可以通过初始化列表使用默认构造函数以外的其他构造函数。您可以使用智能指针来摆脱析构函数,尽管编写良好的类实现不需要这些。
-
变量在堆上?哪个变量?您没有显示任何东西在“堆”上分配的东西。你所拥有的只是一个数据成员,它是一个指针,它可以指向任何东西(或什么都没有)。
-
在您的优势列表中,第二个和第三个项目符号不正确。
标签: c++ variables pointers header-files declaration