Я не понимаю, почему инициализация динамически распределенной структуры должна быть сделана следующим образом (с использованием общего ptr) Просто для уведомления, что я использую C ++ 11
Если у нас есть структура, подобная этой
struct Meme {
std::string s;
Meme* p;
}
и позже в коде, мне нужно динамически распределять память для этой структуры, используя shared_ptr, но мне нужно сделать мгновенную инициализацию структуры.Почему это делается так?
std::shared_ptr<Meme> novi=std::make_shared<Meme>(Meme{imena.at(i),nullptr});
часть, которая меня смущает, такова:
std::make_shared<Meme>(Meme{imena.at(i),nullptr});
Если мы устанавливаем, что shared_ptr указывает на структуру Meme, почему мы должны снова указать, чтосписок инициализации предназначен для struct Meme, говоря:
(Meme{imena.at(i),nullptr})
Почему это не сработает:
std::shared_ptr<Meme> novi=std::make_shared<Meme>({imena.at(i),nullptr});
Может ли этот список инициализации не вычесть, что ему нужно преобразовать в struct Meme, потому чтонет прямого использования struct Meme (хотя make_shared указывает на struct Meme)?