如何在 C++ 中删除 class 对象?
How to delete class object in C++?
我有一个名为 City 的 class,其对象取决于 3 个变量:string name, int area, int population
和一个构造函数。
我有一个像这样的析构函数 City::~City() {}
在 main.cpp 中,我正在创建一个这样的对象:City city1 = City("New York", 123, 100000)
之后我想删除我创建的对象 city1
,我正在尝试:
city1.~City();
- 没有任何反应
delete city1;
或 delete[] city1;
- Cannon delete 类型 'City'
的表达式
delete [city1];
- lambda 表达式的预期主体
我应该如何删除 class 对象?我应该以某种方式更改析构函数吗?
如果像这样声明一个 City
对象:
{
City city1 = City("New York", 123, 100000);
// ...
那么删除这个对象的正确代码是:
}
由于 c++ 具有自动存储持续时间的对象的确定性销毁(city1
的情况),一旦超出范围就会被正确清理。
一般来说,这需要正确编写City
的析构函数,但在你的情况下,因为它只包含一个string
和2个int
,隐式析构函数会做正确的事。
What should I do to delete class object?
取决于您创建实例的方式。自动、静态和线程本地存储中的对象以及临时对象会自动销毁。所有变量都具有这些存储之一 classes.
动态对象必须显式销毁。通常删除动态分配对象的理想方法是将所有权转移到智能指针,当智能指针被销毁时删除指向的对象。
City city1 = City("New York", 123, 100000)
这是一个变量。因此,该对象会自动销毁。
Should I change the destructor somehow?
取决于 class 的职责。通常,class 的理想设计是不需要用户定义的析构函数。
I'm trying:
city1.~City();
- nothing happens
你的情况很可能是错误的。如果您不创建另一个实例来代替被销毁的实例,那么当变量被销毁时,程序的行为将是未定义的。
delete city1;
or delete[] city1;
- Cannon delete expression of type 'City'
city1
不是指针,所以不是可以删除的东西
delete [city1];
- Expected body of lambda expression
C++ 中没有这样的语法。
我有一个名为 City 的 class,其对象取决于 3 个变量:string name, int area, int population
和一个构造函数。
我有一个像这样的析构函数 City::~City() {}
在 main.cpp 中,我正在创建一个这样的对象:City city1 = City("New York", 123, 100000)
之后我想删除我创建的对象 city1
,我正在尝试:
city1.~City();
- 没有任何反应
的表达式delete city1;
或delete[] city1;
- Cannon delete 类型 'City'delete [city1];
- lambda 表达式的预期主体
我应该如何删除 class 对象?我应该以某种方式更改析构函数吗?
如果像这样声明一个 City
对象:
{
City city1 = City("New York", 123, 100000);
// ...
那么删除这个对象的正确代码是:
}
由于 c++ 具有自动存储持续时间的对象的确定性销毁(city1
的情况),一旦超出范围就会被正确清理。
一般来说,这需要正确编写City
的析构函数,但在你的情况下,因为它只包含一个string
和2个int
,隐式析构函数会做正确的事。
What should I do to delete class object?
取决于您创建实例的方式。自动、静态和线程本地存储中的对象以及临时对象会自动销毁。所有变量都具有这些存储之一 classes.
动态对象必须显式销毁。通常删除动态分配对象的理想方法是将所有权转移到智能指针,当智能指针被销毁时删除指向的对象。
City city1 = City("New York", 123, 100000)
这是一个变量。因此,该对象会自动销毁。
Should I change the destructor somehow?
取决于 class 的职责。通常,class 的理想设计是不需要用户定义的析构函数。
I'm trying:
city1.~City();
- nothing happens
你的情况很可能是错误的。如果您不创建另一个实例来代替被销毁的实例,那么当变量被销毁时,程序的行为将是未定义的。
delete city1;
ordelete[] city1;
- Cannon delete expression of type 'City'
city1
不是指针,所以不是可以删除的东西
delete [city1];
- Expected body of lambda expression
C++ 中没有这样的语法。