何时在堆与堆栈上具有类成员
When to have class member on heap vs stack?
我正在学习C++对象设计。何时在堆与堆栈上声明类成员?
class RacingLiveEvent
{
public:
playerlist *pl;
}
与
class RacingLiveEvent
{
public:
playerlist pl;
}
哪些设计/运行时/编译时注意事项将帮助我做出决定。有什么建议吗?
我看到堆,我可以在自己的头文件中定义每个类。如果我使用静态对象,我需要将所有依赖类放在一个文件中。
编辑:这个问题更多的是关于类设计,而不是指针和引用之间的区别,正如一些主持人/堆栈溢出AI所指出的那样。我们已经在评论中得到了彼得和松布雷罗的一些答案。
如果您需要将成员共享/传递给其他函数/类,请使用指针(更好的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
才会死亡。
请注意,如果您使用裸指针与他人共享您的会员不是一个好主意。
除此之外,使用堆栈。
相关文章:
- C++类成员:堆栈与堆分配
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- C++ 中类成员的堆栈的 pop() 函数
- 局部堆栈变量成员的返回值优化
- C++堆对象具有堆栈或堆成员?
- 复制堆栈上的成员值或使用指针访问它?
- 在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题
- 何时在堆与堆栈上具有类成员
- 返回可能在C++中分配在堆栈上的成员时,最佳指针/引用类型是什么
- 使用 STL 堆栈作为C++类的成员
- 当对象包含指针成员时,堆栈上的对象销毁出现分段错误
- 成员对象为unique_ptr或在堆栈上
- 如果我将堆栈上分配的元素的指针推入 std::vector,则其成员的值会发生变化
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 在堆或堆栈上的指针类实例中分配C++非指针数据成员
- 成员函数内存分配堆栈或堆
- 将没有成员的函子设置为类成员对象还是堆栈对象更有效
- 常量成员堆栈与堆
- 堆栈上有成员的向量