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
)。
我有一个带有字符串指针和大小整数的简单 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
)。