【发布时间】:2015-05-01 17:20:53
【问题描述】:
在 C++ 中,如果我想拥有一个没有默认构造函数的类的成员,我需要像这样显式初始化它:
class a
{
a(int)
{
}
};
class b
{
a x;
b() : x(3)
{
}
};
但是,有时对 x 的初始化可能不是那么简单。它可能是一个非常复杂的公式,也可能是一个需要计算的带有 fors 和 ifs 的整体算法函数。我通常是这样解决的:
class b
{
a * x;
b()
{
// Do some very complicated computations
this->x = new a(result_of_complicated_computations);
}
};
然而,这迫使我在销毁的那一刻删除指针,它的性能稍差,并且使我的代码变得不整洁和丑陋。我真的很惊讶,没有办法在类的构造函数中计算成员的构造函数的参数,而不必使用这种技巧。
有没有更优雅的解决方案?
【问题讨论】:
-
使用智能指针或一些附加功能
-
为什么不能将复杂的计算转移到它自己的函数中,并使用该函数的输出创建
a类型的对象,而不考虑堆分配的任何需要?
标签: c++ constructor member default-constructor