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

C++ array of strings destructor

我有一个带有字符串指针和大小整数的简单 class。它的构造函数将大小设置为 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<<"constructing\n";
    }
    ~Some_Class()
    {
        cout<<"destroying\n";
    }
};
int main()
{
    cout<<"executing...\n";
    Some_Class *p=new Some_Class[0];
    delete[] p;
    cout<<"executed\n";
    return 0;
}
/* OUTPUT:-
executing...
executed
*/

很明显我的程序不会像你的那样崩溃。您的问题可能是您正在手动调用 destructor 。在这种情况下,它将删除 class object 两次,即 undefined behaviour。因此,如果您尚未分配对象 dynamically,请不要手动调用 destructor(即使用 new,因为在这种情况下您必须调用 delete)。