假设我有std::vector<std::vector<std::string>>
我目前正在做的是:
std::vector<std::vector<std::string>> obj;
for(auto i:obj) {
for(auto j:i)
j.~basic_string();
i.clear();
}
但这当然只会清除对象并且不会释放它们所拥有的内存。
std::vector
是否为自身的基本实例使用任何内存?我如何保证释放这个内存以便它可以用于其他内容,或者这会自动发生吗?
答案 0 :(得分:4)
您的代码已损坏。当它们仍由容器拥有时,您正在销毁对象。目前尚不清楚您认为自己需要做什么,但不应该做任何事情。这些容器拥有它们包含的对象,当容器被销毁时,其中的所有内容都是如此。
答案 1 :(得分:1)
如果你的容器包含指针,那么你就有责任处理它们的生命周期。否则,你不是。
您目前正在调用undefined behaviour
。所涉及的容器负责自己的内存管理 - 它们会破坏自己的内容,导致析构函数运行两次(带有未定义的后果)。
作为一般规则:
delete
/ free
和 ,则只需致电new
/ malloc
不会将new
/ malloc
的结果传递给旨在自动管理这些分配生命周期的类型。