1

我在 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 

问题是:operatordelete在objective-c++ 中工作吗?它会导致内存泄漏吗?

没有错误,没有异常,也没有警告!

4

1 回答 1

1

您的代码没有内存泄漏。但是,它在 之后的以下两行中具有未定义的行为delete

cout << v[0] << endl << v[1] << endl;

cout << pv->operator[](0) << endl << pv->operator[](1) << endl;

换句话说,在你之后delete pv,你是不允许取消引用pv的。如果你的程序在你崩溃的时候没有崩溃,并且如果内存仍然包含旧数据,那没有任何意义。行为仍未定义。

于 2013-01-26T09:18:00.953 回答