【发布时间】:2018-06-12 18:18:12
【问题描述】:
我有一个带有std::vector const& 成员的类,该成员应通过构造函数进行设置。但是,也应该可以在构造函数中省略这个参数,让成员用默认值初始化。
示例代码:
class MyClass {
public:
MyClass(int a, const std::vector<int> &v = {42,42,42}) : vec(v){}
const std::vector<int> &vec;
};
int main(void) {
std::vector<int> a{1,2,3};
MyClass c1(1,a); // c1.vec = 1,2,3
MyClass c2(1); // c2.vec = randomStuff
// should actually be 42,42,42
}
如果我将初始化更改为:
MyClass(int a, const std::vector<int> &v = *(new std::vector<int>{42,42,42})) : vec(v){}
一切正常,因为超出范围时临时向量不会被删除。但是,这感觉不对,并且看起来内存泄漏。有没有更明智的方法来实现预期的行为?
【问题讨论】:
-
请注意,它不只是看起来内存泄漏,它确实会泄漏内存。
-
您确定持有 reference 成员真的是您想要做的吗?确保你的对象生命周期完全正确!
标签: c++ constructor default-arguments