std::vector<char>*temp = new std:: vector<char>;
temp->push_back('a');
我是否需要使用delete temp来释放内存?或者内存释放是否由向量处理?
vector<>
的关键在于它在内部为您分配内存并使您免于担心内存管理的所有需求您只需使用它就像
std::vector<char> temp;
temp.push_back('a');
然后当temp
超出范围时,存储在temp
内的所有内存都会自动删除。
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
指针永远不会被删除,因此数据永远不会被破坏。