C++ 目标c和x2B+;运算符删除
我在Xcode命令行应用程序中有以下代码:C++ 目标c和x2B+;运算符删除,c++,memory-management,memory-leaks,C++,Memory Management,Memory Leaks,我在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<str
#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;
}
问题是:操作符delete
是否在objective-c++中工作?它会导致内存泄漏吗
没有错误,没有例外,也没有警告 您的代码没有内存泄漏。但是,它在
删除
后的以下两行上有:
cout << v[0] << endl << v[1] << endl;
cout << pv->operator[](0) << endl << pv->operator[](1) << endl;
cout您的代码没有内存泄漏。但是,它在删除
后的以下两行上有:
cout << v[0] << endl << v[1] << endl;
cout << pv->operator[](0) << endl << pv->operator[](1) << endl;
cout我猜是UB-因为调用delete
后,您无法判断删除的内存是什么。但那只是我的猜测UB是什么?顺便说一下,如果我再次使用“new”,它不会覆盖内存。UB是未定义的行为。当您再次执行new
操作时,您可能会得到一个新的内存插槽,因此它不会指向与旧内存相同的位置。这就是为什么它不“覆盖”它。顺便说一下,第一行被删除,你的代码是有效的C++,它与Objto-C或ObjuleC++无关。我猜是UB-因为你不能说出在代码>删除> /代码>之后,被删除的内存将被调用。但那只是我的猜测UB是什么?顺便说一下,如果我再次使用“new”,它不会覆盖内存。UB是未定义的行为。当您再次执行new
操作时,您可能会得到一个新的内存插槽,因此它不会指向与旧内存相同的位置。这就是为什么它不“覆盖”它。顺便说一下,第一行被删除,你的代码是有效的C++,它与Objto-C或ObjuleC++无关。我理解。但是,您如何知道没有内存泄漏?我能有证据吗?(文档,大型iOS应用程序,已知的工作与C++,明显的重写位相同的内存)。我不想发现我正在编写的应用程序由于未知原因而失败。好的。我理解。但是,您如何知道没有内存泄漏?我能有证据吗?(文档,大型iOS应用程序,已知的工作与C++,明显的重写位相同的内存)。我不想发现我正在编写的应用程序由于未知的原因而失败。