【发布时间】:2019-05-11 13:46:44
【问题描述】:
我不明白为什么需要像这样初始化动态分配的结构(使用共享 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 指向 struct Meme,为什么我们需要再次指定初始化列表是针对 struct Meme,通过说
(Meme{imena.at(i),nullptr})
为什么这不起作用:
std::shared_ptr<Meme> novi=std::make_shared<Meme>({imena.at(i),nullptr});
这可能是因为没有直接使用 struct Meme(即使 make_shared 指向 struct Meme),初始化列表不能推断它应该转换为 struct Meme 吗?
【问题讨论】:
标签: initialization structure shared-ptr dynamic-memory-allocation initializer-list