代码之家  ›  专栏  ›  技术社区  ›  johnbakers

我应该更喜欢显式分配而不是非指针成员吗?

c++
  •  0
  • johnbakers  · 技术社区  · 10 年前

    我有一个 Console 类用作内部日志记录工具。它可能会增加到数千个字符串条目。我把它附加到这样的类中:

    class App{
    public:
    
        Console console;
    ...
    

    我的理解是,无论我是这样做,还是有一个成员 Console* console (或共享指针变体),无论是在静态存储区域中分配,还是在内存使用情况下,这两种方法都差不多。这是正确的吗?

    为什么我应该选择一种或另一种方法,还有其他原因或考虑吗?如果这是堆栈内存区域,我知道会有更明显的理由选择为大型对象分配指针,但我认为这不适用于这里。

    由于我可以得到这个fine的地址,如果我确实需要一个指针,那么它的传递很简单,所以我看不到在这个场景中显式分配这个指针的明显优势。感谢您的建议。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Sami Sallinen    10 年前

    如果您有指向对象的指针或智能指针,这意味着该对象将从堆中分配。

    如果应用程序有一个直接控制台成员,那么它将从与应用程序对象相同的池中分配。

    如果Console将字符串存储为std::strings,特别是std:字符串存储在标准库容器中,那么存储并不重要,因为字符串数据将从堆中动态分配。

    因此,我建议您将Console作为会员,因为这是最省事的方式,除非您在应用程序运行时需要更改为其他Console。