Вот что у меня есть:C++: Инициализировать вектор shared_ptr в конструкторе, как различные указатели
class A
{
A(int i):_i(i){}
private:
int _i;
};
class B
{
B();
private:
std::vector< boost::shared_ptr<A> > _v;
}
И мне нужно инициализировать _v
с двумя boost::shared_ptr<A>
с.
Я попытался это:
B::B():_v(2, boost::make_shared<A>(0)){}
Но, похоже, что и точка указатель на единственный созданный объект - не то, что мне нужно.
Я не c++11
, так что я не могу использовать:
B::B():_v{boost::make_shared<A>(0), boost::make_shared<A>(0)}{}
Что является лучшим решением для этой ситуации?
Не можете ли вы просто «push_back» дважды? – mfontanini
'B :: B(): _v (2) {_v [0] = boost :: make_shared (0); _v [1] = boost :: make_shared (0); } ' – john
Вы можете использовать' boost :: assign :: list_of', например. 'S(): v (list_of (make_shared (0)) (make_shared (1))) {}' к сожалению, это, как сообщается, неоднозначно (ctor 'v'; я не знаю почему) и может (make_shared (0)) (make_shared (1))) {} ' –
dyp