内存管理 - 目标 C++ 运算符删除
memory management - objective c++ operator delete
我在 Xcode 命令行应用程序中有以下代码:
#import <Foundation/Foundation.h>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
vector<string> *pv = new vector<string>;
vector<string> &v = *pv;
v.push_back("juy");
v.push_back("zxc");
cout << v[0] << endl << v[1] << endl;
delete pv;
cout << v[0] << endl << v[1] << endl;
cout << pv->operator[](0) << endl << pv->operator[](1) << endl;
return 0;
}
当我运行它时,这是输出:
juy zxc juy zxc juy zxc
问题是:运算符delete
在 objective-c++ 中工作吗?它会导致内存泄漏吗?
没有错误,没有异常,也没有警告!
您的代码没有内存泄漏。但是,它在delete
之后的以下两行上具有未定义的行为:
cout << v[0] << endl << v[1] << endl;
cout << pv->operator[](0) << endl << pv->operator[](1) << endl;
也就是说,在你delete pv
之后,你不允许取消引用pv
。如果你的程序在你崩溃时没有崩溃,并且内存仍然包含旧数据,那没有任何意义。行为仍未定义。
相关文章:
- 编译"运算符删除"时C++编译器如何工作?
- 删除 x 与 ::运算符删除 (x)
- 未找到匹配的运算符删除;如果初始化引发异常,内存将不会被释放
- 为什么在运算符删除中不调用析构函数?
- 如何在 C++ 中使用删除运算符删除单个数据
- C++对自动(堆栈)指针使用运算符删除
- C++运算符删除覆盖并不总是使用
- 带大小参数和不带大小参数的"运算符删除":当两者都可用时,选择哪一个?
- C++ 运算符删除重载对派生类不起作用
- 无法覆盖C++中纯抽象类中的运算符删除/新建
- 对运算符删除覆盖的工作方式感到困惑
- C++/析构函数-运算符删除
- C++can运算符删除失败,如果不是原因
- 如果我写一个新的展示位置?我应该如何编写普通运算符删除
- 删除与运算符删除(和无效指针)
- 使用单个删除运算符删除多个指针
- 如何实现 C "classes" 的 C++11 冒名顶替者的运算符删除?
- shared_ptr-运算符删除中的访问冲突
- 使用delete运算符删除结构中的元素
- 内存管理 - 目标 C++ 运算符删除