c++ - 什么时候在堆和堆栈上有类成员?
问题描述
我正在学习 C++ OO 设计。何时在堆与堆栈上声明类成员?
class RacingLiveEvent
{
public:
playerlist *pl;
}
对比
class RacingLiveEvent
{
public:
playerlist pl;
}
哪些设计/运行时/编译时考虑将帮助我做出决定。请问有什么建议吗?
我看到堆,我可以在自己的头文件中定义每个类。如果我使用静态对象,我需要将所有依赖类放在一个文件中。
编辑:这个问题更多的是关于类设计,而不是一些主持人/stackoverflow AI指出的指针和引用之间的区别。我们已经在评论中得到了 Peter 和 Sombrero 的一些答案。
解决方案
如果您需要将成员共享/传递给其他函数/类,请使用指针(更好shared_ptr
),因为该成员很大,因此复制成本很高。
指针允许成员超过其范围,并且当您的对象被破坏时,如果它在其他一些类或函数中使用,您希望允许成员的寿命比其范围更长。
一个很好的用例shared_ptr
是一些不同类型的对象共享相同的成员:
class A{
public:
A(std::shared_ptr<SomeType> member) :
member(member){}
std::shared_ptr<SomeType> member;
//
};
class B{
public:
B(std::shared_ptr<SomeType> member) :
member(member){}
std::shared_ptr<SomeType> member;
//
};
在这里,A 和 B 可以共享同一个成员,如果他们共享,则只有在使用的每个人都超出其范围member
时才会死亡。member
请注意,如果您使用裸指针与他人共享您的成员不是一个好主意。
除了这个使用堆栈。
推荐阅读
- scala - 通过 Scala 中的反射确定构造函数参数计数和类型
- html - 改变
- 以 4 行间隔垂直到水平列出
- pointers - 为什么在某些情况下零大小的类型会导致实际分配?
- database - 如何加快具有许多布尔字段的 mongo db 查询?
- c# - 创建一个指向任意数据的位域类——这安全吗?
- html - 如何从 JSON 中添加文本“
“?
- javascript - 如何找到确定特定像素颜色的 CSS/HTML 规则
- javascript - 通过 config.json 文件注册时,导入语句会破坏 typeorm 实体
- python - 如何正确分组字符串中的项目?
- html - 响应式步进栏,桌面垂直,移动水平。如何?