我有一个头文件,我必须尊重它来实现我的类,它有这个:
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/