内存管理 - 目标 C++ 运算符删除

memory management - objective c++ operator delete

本文关键字:运算符 删除 C++ 目标 管理 内存      更新时间:2023-10-16

我在 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。如果你的程序在你崩溃时没有崩溃,并且内存仍然包含旧数据,那没有任何意义。行为仍未定义。