【发布时间】:2012-07-28 09:49:25
【问题描述】:
通常,当我使用非本地范围内的 STL 对象时,我会存储指向我想要存储的数据的指针。比如
std::vector<MyStruct*>
当需要清理向量时,我会检查并删除所有内容。我最近注意到这并不像我想象的那样是必要的。无论出于何种原因,我一直认为 STL 类将数据存储在堆栈上,而我现在认为它是在堆上分配数据的。它是否正确?将对象存储为指针以减少复制时间是唯一真正的好处吗?
【问题讨论】:
-
std::vector<Shape *>可以存储Circle *。std::vector<Shape>不能存储Circle。 -
每个动态容器中的每个对象始终是无条件的动态对象,其生命周期由容器管理。可配置的是内存分配策略,但这并不重要。请记住,C++ 将内存分配和对象创建作为两个不同的概念和职责范围分开。
标签: c++ memory-management stl