c++ - 如果 C++ 程序发生错误,如何删除动态分配的对象?
问题描述
我想知道如果程序中发生错误,如何删除动态分配的对象。想象一下这个:
int main() {
int *ptr = new int();
int result = 15 / 0;
delete ptr;
}
除以0是完全不可能的,那么与ptr关联的int永远不会被删除?
解决方案
如果 C++ 程序发生错误,如何删除动态分配的对象?
它没有被删除。
而且因为指针值会丢失,所以它永远不能被删除。这称为内存泄漏。
除以0是完全不可能的,那么与ptr关联的int永远不会被删除?
请注意,除以零的行为是不确定的。因此,不能保证一定会出错。
如果一个程序异常终止,那么就会有一些内存没有被释放。这个泄漏很好,因为程序正在终止。操作系统将恢复为进程保留的所有内存。
更有问题的情况是异常,可能会被捕获,程序可能会继续执行。为了使程序异常安全,您不能执行在持有拥有裸指针时可能会抛出的操作。事实上,您应该尽可能避免拥有裸指针。相反,使用 RAII 容器和智能指针。
推荐阅读
- powershell - PowerShell正则表达式删除提取Windows补丁到C盘根目录的文件夹
- javascript - How do you get around NATs using WebRTC without a TURN server?
- python - recursively go through list to calculate the percentage change between two items at every n elements
- vue.js - strange behavior when trying to re-render data inside slot in vue
- docker - In which folder is data of volumes in Docker Windows stored?
- git - Jenkins pipeline fails git clone using sshagent plugin?
- angular - application Error net::err_proxy_connection_faild (http://192.168.43.162)
- java - 迭代流时出现 NullPointerException
- android - How I can show my android constrain layout chain icon hints, I did not show this feature in my layout. I am using android version 3.5.2
- python - 如何在keras的LSTM自动编码器中获取middel层的输出