我有一个看起来像的构造函数:
RandomClass(const int16_t var1, const SecondClass& var2);
我需要将默认参数传递给第二个参数,所以目前我做的是这样的事情:
RandomClass(const int16_t var1, const SecondClass& var2 = *(new SecondClass(*(new std::unordered_map<int16_t, double>())));
令人难以置信的尴尬。请注意,我不想使用重载的构造函数,或者将第二个参数从引用更改为指针。
传递默认参数的优雅方式是什么?
答案 0 :(得分:3)
您可以将const引用绑定到临时:
RandomClass(const int16_t var1, const SecondClass& var2 = SecondClass(std::unordered_map<int16_t, double>()));
当然,这假设您要么将var2
复制到成员中,要么在构造函数退出后不使用它。如果不是这种情况,那么您的设计就会出现问题。也许使用原始指针或shared/weak_ptr
更合适。
答案 1 :(得分:1)
这样做很好的方法是为构造函数提供两个重载:
RandomClass(const int16_t var1, const SecondClass& var2)
{
// ...
}
RandomClass(const int16_t var1)
{
const SecondClass var2 = *(new SecondClass(*(new std::unordered_map<int16_t, double>()));
}
然而,你的问题比它的外观要糟糕得多。你在第二次重载中所拥有的是非常可怕的,因为它会导致内存泄漏 - 你需要delete
你new
的所有内容,但现在你已经丢失了new
编辑的内容。你只需要这样做:
RandomClass(const int16_t var1)
{
const SecondClass var2{std::unordered_map<int16_t, double>()};
}
除非必须,否则请勿使用new
- 更喜欢自动存储时间。