c++字符串数组析构函数
C++ array of strings destructor
我有一个简单的类与字符串指针和大小整数。它的构造函数将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
。
相关文章:
- 如何在析构函数中删除C++中动态分配的数组?
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- C++ 在析构函数调用之前删除的动态成员数组
- 取消分配动态分配的字符数组的析构函数
- 在C++中删除指针数组时析构函数崩溃
- 为什么我不能使用已删除或私有析构函数分配类的数组?
- 如何对动态数组中的某些对象调用析构函数
- 为什么析构函数和复制构造函数使用对象数组显示此行为
- 这是删除析构函数中的数组的正确方法吗?
- 指向数组的指针的析构函数
- 具有受保护析构函数的类数组的动态分配
- 析构函数立即调用并删除我的数组
- 为什么析构函数不释放数组内存?
- 如何在具有指向对象的指针数组的类中创建复制构造函数和析构函数,其中对象本身具有指向整数的指针数组
- 析构函数删除在 main 中声明的动态数组
- 删除类数组而不调用析构函数
- 构造函数、析构函数和指针(以及向量、数组和删除等等)
- C++析构函数删除包含动态数组作为数据成员的对象时的用法
- 为什么不为对象数组调用析构函数
- 指向数组的指针数组的析构函数