C++ 向量释放

C++ 向量释放,c++,stl,vector,C++,Stl,Vector,给定一个STLvector指针,在销毁vector本身之前,必须先释放每个元素。是否有任何技术含义阻止STL库自动执行此操作 谢谢您可以将向量销毁时不应删除的指针存储在这些位置 使用智能指针向量(例如boost::shared_ptr)接收自动解除分配STL不为您这样做的原因是它不知道是否应该这样做。您可能有指向数组的指针向量(在这种情况下需要执行delete[]),指向常规对象的指针向量(在这种情况下需要执行delete),或者可能有来自某个自定义分配器的内存。这些指针还可以与其他一些对象共享

给定一个STL
vector
指针,在销毁
vector
本身之前,必须先释放每个元素。是否有任何技术含义阻止STL库自动执行此操作


谢谢

您可以将向量销毁时不应删除的指针存储在这些位置


使用智能指针向量(例如boost::shared_ptr)接收自动解除分配

STL不为您这样做的原因是它不知道是否应该这样做。您可能有指向数组的指针向量(在这种情况下需要执行
delete[]
),指向常规对象的指针向量(在这种情况下需要执行
delete
),或者可能有来自某个自定义分配器的内存。这些指针还可以与其他一些对象共享,在这种情况下,删除它们会导致其他对象指向垃圾数据,从而导致未定义的行为。这些指针也可以指向堆栈分配的内存,在这种情况下不需要释放。

如果向量包含指针,则并不意味着指针指向动态内存。如果是这样,是否应该对每个指针应用
delete
delete[]
?如果指针指向使用“新放置”创建的对象呢?所有这些问题都应该由程序员来回答,而不是由库来回答。

“给定一个指针的STL向量,每个元素都必须在销毁向量本身之前被释放”不,这不符合要求。在任何情况下,手动管理资源都是不好的。使用智能指针。“并不意味着…指向静态内存”应该是“动态的”。@Tony Yep,我犯过的最奇怪的打字错误之一:-)谢谢你指出这一点。