c++ - 在 C++ 中通过函数删除对象
问题描述
我对 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
会指向已被释放的内存。删除该内存后访问该内存将是未定义的行为。
推荐阅读
- session - 检查帖子作者是否等于登录用户
- php - 'where 子句'中的未知列'users.user_id'
- postgresql - bacular-dir 升级后不启动 (Ubuntu 16.04)
- python - 获取用户在 Flask 中的位置
- html - 在 HTML 上的 Excel 预览
- uber-api - 访问优步司机 API
- swift - 如何将数据源出口连接到另一个故事板中引用的视图控制器?
- c - 如何在 C 中使用枚举类型结构?
- c# - HTTP 状态码 500,.net core CORS 和 HttpClient 错误
- android - 从 xml 中获取值