"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_size
和 sum
设置为零。
但是,main 函数中的 MovingAverage * m = new MovingAverage(3);
行没有 return 指向 class 的实例的指针,其中有两个成员 curr_size
和 sum
归零。
相反,调试器显示创建的对象具有 curr_size = 1953853300
和 max_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);
一定是我对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_size
和 sum
设置为零。
但是,main 函数中的 MovingAverage * m = new MovingAverage(3);
行没有 return 指向 class 的实例的指针,其中有两个成员 curr_size
和 sum
归零。
相反,调试器显示创建的对象具有 curr_size = 1953853300
和 max_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);