"new"没有在class中调用指定的构造函数?

"new" does not call the specified constructor in a class?

一定是我对new算子的理解有误

代码的相关部分如下:

#include <queue>

using namespace std;

class MovingAverage {
public:
    /** Initialize your data structure here. */
    MovingAverage(int size) {
        queue<double> q;
        int max_size = size;
        int curr_size = 0;
        double sum = 0.0;
    }

private:
    queue<double> q;
    int curr_size;
    int max_size;
    double sum;
};

int main(){
    MovingAverage * m = new MovingAverage(3);  // This line does not work as expected!
    return 0;
}

在上面的代码中,class MovingAverage 有一个构造函数 MovingAverage(int size) 将它的两个成员变量 curr_sizesum 设置为零。

但是,main 函数中的 MovingAverage * m = new MovingAverage(3); 行没有 return 指向 class 的实例的指针,其中有两个成员 curr_sizesum归零。

相反,调试器显示创建的对象具有 curr_size = 1953853300max_size = 6647401.

如何让 new 运算符调用我编写的构造函数?

您的代码在构造函数体内声明了局部变量。正确的做法是使用构造函数的 member initializer list:

MovingAverage(int size):
    max_size(size),
    curr_size(0),
    sum(0.0)
{}

除此之外,理想情况下您不应该使用那样的原始指针。还有像std::unique_ptr and std::shared_ptr这样的智能指针类,可以让代码更安全,更容易维护。所以你的代码可以是:

#include <memory>

...
auto m = std::make_unique<MovingAverage>(3);

auto m = std::make_shared<MovingAverage>(3);