我对 C++ 中指针的行为有点好奇。所以我有这个小程序要测试,不幸的是它运行良好。
#include <iostream>
class Test{
public:
Test(){
std::cout<<"Test Created!\n";
}
~Test(){
std::cout<<"Test Destroyed!\n";
}
};
void destroyer(Test* T){
Test* temp = T;
delete temp;
}
int main(){
Test* ptr = new Test();
destroyer(ptr);
}
作为返回
Test Created!
Test Destroyed!
我得出的结论是,当我们删除一个指针时,实际上它只是删除指针指向的对象,而不是变量本身(变量指针会在程序结束时自动删除,与其他原始数据类型相同)。我的想法是真的吗?
最佳答案
是的,delete
操作符只是调用析构函数,释放指针指向的对象占用的内存。指针本身和其他任何变量一样是局部变量,不能(也不需要)删除。
可能值得注意的是调用delete ptr;
不会改变ptr
的值,所以在删除指针之后ptr
将指向已释放的内存。在删除内存后访问该内存将是未定义的行为。
https://stackoverflow.com/questions/66687416/