C++ 如何在C++;?

C++ 如何在C++;?,c++,class,oop,constructor,destructor,C++,Class,Oop,Constructor,Destructor,我有一个名为City的类,它的对象依赖于3个变量:字符串名、int区域、int人口,以及用于此的构造函数。 我有一个析构函数,看起来像City::~City(){} 在main.cpp中,我正在创建这样一个对象:city1=City(“纽约”,123100000) 之后,我想删除我创建的对象city1,我正在尝试: city1.~City()-什么也没发生 删除城市1或删除[]城市1-Cannon删除类型为“City”的表达式 删除[city1]-预期的lambda表达式体 我应该如何删除

我有一个名为City的类,它的对象依赖于3个变量:
字符串名、int区域、int人口
,以及用于此的构造函数。 我有一个析构函数,看起来像
City::~City(){}

在main.cpp中,我正在创建这样一个对象:
city1=City(“纽约”,123100000)

之后,我想删除我创建的对象
city1
,我正在尝试:

  • city1.~City()-什么也没发生

  • 删除城市1
    删除[]城市1-Cannon删除类型为“City”的表达式

  • 删除[city1]-预期的lambda表达式体


  • 我应该如何删除类对象?我是否应该以某种方式更改析构函数?

    如果您像这样声明一个
    City
    对象:

    {
      City city1 = City("New York", 123, 100000);
      // ...
    
    那么删除此对象的正确代码是:

    }
    
    <>由于C++对自动存储持续时间的对象有确定性破坏(如 CITY1),当它超出范围时,它将被正确地清除。 通常,这需要正确编写
    City
    的析构函数,但在您的情况下,由于它只包含
    字符串和2
    int
    s,因此隐式析构函数将做正确的事情

    我应该如何删除类对象

    取决于创建实例的方式。自动、静态和线程本地存储中的对象以及临时对象将自动销毁。所有变量都有其中一个存储类

    必须明确销毁动态对象。通常,删除动态分配的对象的理想方法是将所有权转移到智能指针,该智能指针在智能指针被销毁时删除指向的对象

    这是一个变量。因此,对象将自动销毁

    我应该换个析构函数吗

    取决于班级的职责。通常,类的理想设计是不需要用户定义的析构函数


    我正在努力:

    • city1.~City()-什么也没发生
    在你的情况下,这很可能是错误的。如果不创建另一个实例来代替已销毁的实例,那么当变量被销毁时,程序的行为将是未定义的

    删除城市1
    删除[]城市1-Cannon删除类型为“City”的表达式

    city1
    不是指针,因此不能删除

    删除[city1]-预期的lambda表达式体


    < > C++中没有这样的语法。< /P>请,A。如何删除一个实例很大程度上取决于它是如何构造的。每一本合理的C++书都应该提到这个话题……-)你从来没有用
    new
    获取过对象,因此没有任何东西可以
    删除
    。只是在第二眼看到
    city1=City(“纽约”,123100000)
    。在这种情况下,您不会删除它。当您离开作用域时,它会自动删除。您根本不应该尝试删除它-对象将自动销毁。你可能应该投资一家公司。
    City city1 = City("New York", 123, 100000)