c++字符串数组析构函数

C++ array of strings destructor

本文关键字:析构函数 数组 字符串 c++      更新时间:2023-10-16

我有一个简单的类与字符串指针和大小整数。它的构造函数将size设置为0,指针指向new string[0];当我试图用delete[]销毁字符串*时,程序崩溃了。

#include<string>
using std::string;
class Strarr {
private:
    string *items;
    int size;
public:
    Strarr() {
        items = new string[0];
        size = 0;
    }
    ~Strarr() {
        delete[] items;
    }
};
int main() {
    Strarr test;
    test.~Strarr();
}
谁能解释一下这里发生了什么?

让我给你看一个我写的程序:-

#include <iostream>
using namespace std;
class Some_Class
{
    public:
    Some_Class()
    {
        cout<<"constructingn";
    }
    ~Some_Class()
    {
        cout<<"destroyingn";
    }
};
int main()
{
    cout<<"executing...n";
    Some_Class *p=new Some_Class[0];
    delete[] p;
    cout<<"executedn";
    return 0;
}
/* OUTPUT:-
executing...
executed
*/

显然我的程序不会像你的那样崩溃。你的问题可能是你手动调用destructor。在这种情况下,它会删除两次class object,也就是undefined behaviour。因此,如果您没有分配对象dynamically(即new,因为在这种情况下您必须调用delete),永远不要手动调用destructor