【问题标题】:automatically creating constructor and destructor in visual studio 2019 r [closed]在visual studio 2019 r中自动创建构造函数和析构函数[关闭]
【发布时间】:2021-08-16 13:24:32
【问题描述】:

Visual Studio 2019 在我要创建类时不创建构造函数和析构函数? 它显示类为空,头文件或 cpp 文件中没有构造函数或析构函数

【问题讨论】:

  • 没错。如果您有需要特殊初始化和/或清理的成员,则只需要使用定义的构造函数/析构函数。
  • 请问您能帮我清除一下吗?^^
  • 生成的类没有构造函数/析构函数,因为它没有成员。只有在添加需要特殊初始化的成员之后,类可能才需要构造函数/析构函数。如果添加不需要特殊初始化的成员,则不需要用户定义的构造函数/析构函数。如果不需要特殊的成员初始化,编译器会生成一个默认的构造函数/析构函数,"does-the-right-thing"

标签: c++ class destructor


【解决方案1】:

一个 C++ 类只应该有一个自定义的构造函数或析构函数,如果它们中的任何一个执行了默认行为之外的任何事情。因此,这些方法不会自动创建,因为它们大部分时间都不需要。

要了解这背后的原因,您可能需要阅读Rule of Three, Five, Zero(注意:cppreference.com 上的文章非常技术性,但可能有更友好的教程和文章。只需 google “C++ 规则三个"...)。

特别是,如果您的类需要在复制构造函数或析构函数中执行任何特殊操作(例如内存分配和管理),请始终考虑以下事项:

  1. 使用管理内存的标准类之一,例如std::unique_ptrstd::vector 来管理内存
  2. 可能会将您的类拆分为多个类,一个用于管理每个资源,一个用于其他所有内容,后者使用其他类。

最后,类的成员现在可以直接在类声明中使用默认值进行初始化,因此通常不再需要默认构造函数。示例:

// NEW style, using in-class initialization
class X
{
private:
  int _someMember = 0;
}  

而不是

// OLD style, using a default constructor
class X
{
public:
  X() : _someMember(0) {}

private:
  int _someMember;
}  

这意味着您的许多类可能根本没有任何构造函数或析构函数。

【讨论】:

  • 感激不尽^^
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 2013-08-26
  • 2013-07-07
  • 1970-01-01
  • 2012-09-17
  • 2018-12-09
  • 2015-12-31
  • 1970-01-01
相关资源
最近更新 更多