【发布时间】:2021-02-01 11:55:27
【问题描述】:
我有一个不可复制的对象,它需要一个参数给它的构造函数:
class Foo
{
public:
Foo() = delete;
Foo(const Foo &) = delete;
Foo(int x);
private:
int member;
};
Foo::Foo(int x) : member(x)
{
}
我有另一个类,它包含一个这样的对象数组作为成员:
class Bar
{
public:
Bar(int a);
private:
Foo members[4];
};
假设我的对象Foo 真的太大了,它的构造函数太复杂了,以至于临时或重复副本不存在,或者构造函数对于数组的每个项目都不能被多次调用。
如何编写包含类的构造函数以将参数传递给成员数组中的项目?
我试过了:
Bar::Bar(int a) : members { a, a+1, a+2, a+3 }
{
}
g++ 说“use of deleted function Foo::Foo(const Foo&)”。
[编辑] 我也试过:
Bar::Bar(int a) : members { {a}, {a+1}, {a+2}, {a+3} }
{
}
正如 Yksisarvinen 所建议的那样。这也表示“use of deleted function Foo::Foo(const Foo&)”,但前提是我为Foo 声明了析构函数。如果没有析构函数,则可以正确编译。如何让它为具有析构函数的类编译?
【问题讨论】:
-
能否请您添加编译器错误?
标签: c++ constructor initializer-list