我有一个这样的课:
class MyClass {
MyClass(double *v, int size_of_v){
/*do something with v*/
};
};
我的问题:有什么办法可以初始化此类,而无需定义double数组并将其提供给构造函数?
我想做类似的事情:
auto x = MyClass({1.,2.,3.}, 3);
这称为列表初始化,您需要一个std :: initilizer_list构造函数,该构造函数可在中实现MyClass
。
#include <initializer_list>
class MyClass
{
double *_v;
std::size_t _size;
public:
MyClass(std::initializer_list<double> list)
:_v(nullptr), _size(list.size())
{
_v = new double[_size];
std::size_t index = 0;
for (const double element : list)
{
_v[index++] = element;
}
};
~MyClass() { delete _v; } // never forget, what you created using `new`
};
int main()
{
auto x = MyClass({ 1.,2.,3. }); // now you can
//or
MyClass x2{ 1.,2.,3. };
//or
MyClass x3 = { 1.,2.,3. };
}
还要注意,size_of_v
在构造函数中提供是多余的,因为可以从std :: initializer_list :: size方法获取它。
而对于完整性,遵循的规则三维/五类/零。
作为替代方案,如果可以使用,则可以用std::vector
一种更简单的方式完成,无需手动内存管理。而且,您可以用更少的代码,而无需更多的冗余 _size
成员来实现目标。
#include <vector>
#include <initializer_list>
class MyClass {
std::vector<double> _v;
public:
MyClass(std::initializer_list<double> vec): _v(vec) {};
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句