2

我有一个构造函数,它看起来像:

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>())));

这是非常尴尬的。请注意,我不想使用重载的构造函数,或者将第二个参数从引用更改为指针。

传递默认参数的优雅方式是什么?

4

2 回答 2

3

您可以将 const 引用绑定到临时对象:

RandomClass(const int16_t var1, const SecondClass& var2 = SecondClass(std::unordered_map<int16_t, double>()));

当然,这假设您要么复制var2到成员中,要么在构造函数退出后不使用它。如果不是这种情况,则说明您的设计有问题。也许使用原始指针或 ashared/weak_ptr更合适。

于 2012-11-26T19:49:48.250 回答
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除非必须,否则不要使用- 更喜欢自动存储持续时间。

于 2012-11-26T19:51:43.597 回答