У меня вопрос по поводу std :: vector - PullRequest
1 голос
/ 23 октября 2019

У меня есть сомнения по поводу структуры std :: vector

Если есть класс с именем foo.

Я напишу некоторый код для объяснения.

class foo
{
  //do something...
};

void main(void)
{
  foo a;
  std::vector<std::shared_ptr<foo>> foo_list;

  //Is it right? If not how can I do that?
  foo_list.push_back(a); 
}

Как в этом примере, Если умный указатель был в векторе, Как я могу поместить в оригинальный класс в векторе?

1 Ответ

3 голосов
/ 23 октября 2019

foo_list - это коллекция std::shared_ptr<foo> (которая является общими указателями на foo объекты).

foo_list.push_back(a) пытается добавить экземпляр foo к foo_list - очевидно, этоне будет работать, потому что типы разные (один является общим указателем, другой нет)

Вам нужно что-то вроде:

auto a = std::make_shared<foo>();
foo_list.push_back(a); 
...