如何在 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,我正在尝试:

  1. city1.~City(); - 没有任何反应

  2. delete city1;delete[] city1; - Cannon delete 类型 'City'

    的表达式
  3. 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++ 中没有这样的语法。