繁体   English   中英

我是否应该首选非指针成员的显式分配?

[英]Should I prefer an explicit allocation over a non-pointer member?

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

class App{
public:

    Console console;
...

我的理解是,无论我是以这种方式执行操作,还是以拥有Console* console (或共享指针变体)成员的方式进行操作,无论哪种方式,都将其分配在静态存储区域中,并且就内存使用而言,这与两种方法都一样。 这个对吗?

还有其他原因或考虑因素使我偏爱一种或另一种方法吗? 如果这是堆栈存储区,我知道会有更多明显的理由倾向于为大对象分配指针,但是我认为这并不适用。

因为我可以得到很好的地址,所以如果我确实需要一个指针,那么传递它是微不足道的,因此我看不出在这种情况下显式分配此地址的明显优势。 意见表示赞赏。

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

如果App具有直接的Console成员,则将从与该App对象相同的池中分配它。

如果Console将字符串存储为标准库容器中的std :: strings或特别是std :: strings,则存储的关系不大,因为无论如何仍会从堆中动态分配字符串数据。

因此,我建议仅将Console作为成员,因为这是最轻松的方式,除非您有例如需要在App运行时更改为其他Console。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM