C++ 目标c和x2B+;运算符删除

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

我在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;
}
问题是:操作符
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++,明显的重写位相同的内存)。我不想发现我正在编写的应用程序由于未知的原因而失败。