首页 > 解决方案 > 什么时候在堆和堆栈上有类成员?

问题描述

我正在学习 C++ OO 设计。何时在堆与堆栈上声明类成员?

class RacingLiveEvent
{
public:
    playerlist  *pl;
}

对比

class RacingLiveEvent
{
public:
    playerlist  pl;
}

哪些设计/运行时/编译时考虑将帮助我做出决定。请问有什么建议吗?

我看到堆,我可以在自己的头文件中定义每个类。如果我使用静态对象,我需要将所有依赖类放在一个文件中。

编辑:这个问题更多的是关于类设计,而不是一些主持人/stackoverflow AI指出的指针和引用之间的区别。我们已经在评论中得到了 Peter 和 Sombrero 的一些答案。

标签: c++classoopdesign-patterns

解决方案


如果您需要将成员共享/传递给其他函数/类,请使用指针(更好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

请注意,如果您使用裸指针与他人共享您的成员不是一个好主意。

除了这个使用堆栈。


推荐阅读