std::vector<char>*temp = new std:: vector<char>;
temp->push_back('a');
我是否需要使用Delete temp释放内存?还是通过向量来处理内存释放?
答案 0 :(得分:2)
vector<>
的要点是它在内部为您分配内存,并使您无需担心内存管理的所有需求。您只需像这样使用
std::vector<char> temp;
temp.push_back('a');
然后,当temp
超出范围时,将自动删除temp
内部存储的所有内存。
答案 1 :(得分:0)
std::vector
包含一个内部数组。向量破坏后,该数组会自动删除。
但是,如果您将指针分配给向量,则需要显式删除它。一般来说,只使用向量本身,而不是指向它的指针。
如果我们编写自己的类,我们可以看到此行为。此类包含一些数据,当该数据被销毁时,它将打印一条消息。
class MyClass {
int* data;
public:
MyClass() : data(nullptr) {}
MyClass(int size) : data = new int[size]() {}
~MyClass() {
std::cout << "Deleting data\n";
delete[] data;
}
};
让我们看一下两个功能。其中一个只是直接创建MyClass
,而另一个则创建指针。
void withoutPointer() {
MyClass c(10);
std::cout << "Created MyClass\n";
}
带指针:
void withPointer() {
MyClass* ptr = new MyClass(10);
std::cout << "Create MyClass*\n"
std::cout u<< "Exiting function\n";
}
如果运行withoutPointer()
,它将打印:
Creating MyClass
Deleting data
这是因为调用了析构函数,因此删除了数据。另一方面,如果使用指针运行该指针,它将显示:
Create MyClass*
Exiting function
指针从未被删除,因此数据从未被破坏。