具有队列作为成员的类的 C++ 构造函数和析构函数

标签 c++

我有一个头文件,我必须尊重它来实现我的类,它有这个:

class Example {
private:

    std::queue<ObjectOfClass> Elements;

public:
        Example ();
        ~Example ();

};

我试图将这段代码写入 .cpp 文件,但我不确定它是否合适:

// Constructor
Example::Example() {
    std::queue<ObjectOfClass> Elements;  //maybe I should leave it all empty? not sure
}

// Destructor
Example::~Example() {
    while (!Elements.empty())
    {
        Elements.pop();
    }
}

最佳答案

.cpp 文件中的几个错误:

  • 您正在构造函数的主体中定义一个本地元素队列,它将在完成时被销毁;像 Elements 这样的成员变量应该在初始化列表中初始化以获得最佳性能
  • 在析构函数中单独弹出每个元素是不必要的,因为 STL 容器会在它们被销毁时销毁其中包含的对象

因为你的构造函数和析构函数实际上并没有做任何事情,你甚至根本不需要定义它们。编译器会隐式地为你生成默认的构造函数和析构函数。类 std::queue 有自己的默认构造函数,当创建 Example 的元素时将调用它。

如果你想更明确一点,你可以使用 C++11 附带的关键字 default 来表示头文件本身中的构造函数和析构函数等特殊类成员函数,以及具有初始化成员变量元素的初始化列表:

Example(): Elements() {}
~Example() = default;

您可以使用默认和删除的功能来实现您的设计目标。

关于具有队列作为成员的类的 C++ 构造函数和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58470181/

相关文章:

c++ - 平面的参数化生成

c++ - 使用deque的滑动窗口(运行时错误)

c++ - C/C++ 中静态关键字的输出问题

c++ - 将字符串列表输出到 ostream

c++ - 对于 Cmake,您可以使用 `add_compiler_flags()` 命令修改发布/调试编译器标志吗?

C++:数字排列程序无法正常工作

C++ std:.auto_ptr 或 std::unique_ptr(支持多个编译器,甚至是旧的 C++03 编译器)?

c++ - C++ 编译器通常会优化静态(全局)引用吗?

c++ - 如何检测多显示器系统上的最大化事件

c++ - 模块化算法和 NTT(有限域 DFT)优化