对 std::vector
元素为指针的情况,需要注意以下几点:
- 内存管理:
- 如果
std::vector
存储的是原始指针,那么仅仅清空vector
或者让vector
被销毁,并不会释放指针所指向的内存。因此,需要确保在vector
被销毁之前,逐个删除所有动态分配的对象。 - 为了简化内存管理,推荐使用智能指针(如
std::unique_ptr
或std::shared_ptr
)作为vector
的元素类型。这样,当vector
被清空或销毁时,智能指针会自动释放它们所拥有的资源。
- 如果
- 所有权和生命周期:
- 需要确保在
vector
所包含的指针被使用期间,指向的对象是有效的。同时,需要清楚地定义谁拥有这些对象的所有权,以及在何时何地进行释放。
- 需要确保在
- 异常安全:
- 如果在创建和填充
vector
的过程中遇到异常,需要有一个清晰的机制来处理已经分配的内存,以避免内存泄漏。
- 如果在创建和填充
- 避免悬垂指针:
- 指向曾经存在的对象,但该对象现在已经不再存在了,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此类指针称为垂悬指针
- 当指针指向的对象被删除或移动时,需要确保没有悬垂指针指向无效的内存地址。同样,当
vector
扩容时,这些指针也会失效,变成悬垂指针,所以最好使用智能指针。
- 深拷贝与浅拷贝:如果需要复制这样的
vector
,就需要决定是进行深拷贝(复制指针指向的对象)还是浅拷贝(仅复制指针本身)