我对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;
}
在上面的代码中,类MovingAverage
具有一个构造函数MovingAverage(int size)
,该构造函数将其两个成员变量curr_size
和sum
设置为零。
但是,主函数中的行MovingAverage * m = new MovingAverage(3);
不会返回指向两个成员curr_size
和sum
为零的类实例的指针。
相反,调试器显示创建的对象具有curr_size = 1953853300
和max_size = 6647401
。
如何让new
运算符调用我编写的构造函数?
答案 0 :(得分:3)
您的代码在构造函数的主体内部声明了局部变量。正确的方法是使用构造函数的member initializer list:
awk '
NF {
trailing = (/ / ? "#" : "")
out=$0".txt"
printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > out
close(out)
}
' list_of_names.txt
除此之外,理想情况下,您不应该使用这样的原始指针。有std::unique_ptr和std::shared_ptr之类的智能指针类,可以使代码更安全,更易于维护。因此您的代码可能是:
MovingAverage(int size):
max_size(size),
curr_size(0),
sum(0.0)
{}
或
#include <memory>
...
auto m = std::make_unique<MovingAverage>(3);