Jon*_*Mee 8 c++ destructor vector clear dynamic-allocation
说我有:
vector<string>* foo = new vector<string>();
Run Code Online (Sandbox Code Playgroud)
我添加了大量的东西,使用它,然后我只是打电话:
delete foo;
Run Code Online (Sandbox Code Playgroud)
我需要先打个电话foo.clear();吗?或者将delete调用析构函数.
请不要对此有愚蠢的评论,我知道至少应该在这里使用自动指针.这种行为是在我正在使用的代码库中,我可以去修复它.
是的,vector将调用析构函数,这将清除其内容.
delete在解除分配内存之前调用析构函数,vector的析构函数隐式调用.clear()(正如您所知,让自动存储持续时间vector超出范围).
这是很容易测试,与vector<T>在那里T写std::cout上破坏(但注意内部副本vector):
#include <vector>
#include <iostream>
struct T
{
T() { std::cout << "!\n"; }
T(const T&) { std::cout << "*\n"; }
~T() { std::cout << "~\n"; }
};
int main()
{
std::vector<T>* ptr = new std::vector<T>();
ptr->emplace_back();
ptr->emplace_back();
ptr->emplace_back();
delete(ptr); // expecting as many "~" as "!" and "*" combined
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |