У меня есть эти классы:Общий аргумента в списке инициализации конструктора
class A
{
public:
A(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class B
{
public:
B(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class Foo
{
public:
Foo();
private:
A _a;
B _b;
};
Оба аргумента конструктора из A
и B
одних и той же ссылки указателя shared_ptr
. В этом случае:
Как бы лучший способ инициализации
Foo
?Возможно ли использовать список инициализации в
Foo
s конструктор?
Я смущен, потому что, так как оба класса нуждается в такой же shared_ptr
экземпляре, я бы хранить этот указатель куда-нибудь, и я не думаю, что это возможно, со списками инициализации.
Кроме того, если инициализация происходит в теле конструктора, это означает, что оба A
и B
должны иметь конструктор move
, правильно? Потому что я должен был бы сделать что-то вроде этого:
Foo::Foo() //: Cannot use initializer list
{
auto ptr = std::make_shared<SomeClass>(SomeClass());
_a = A(ptr);
_b = B(ptr);
}
О, спасибо, это хорошее решение: D – lhahn