c – 从指针创建unique_ptr

c – 从指针创建unique_ptr,第1张

概述以下代码给出了错误: void EntityContainer::AddChild(Entity* child) { unique_ptr<Entity> childPtr(child); children.push_back(childPtr);} 我认为这可能不是为现有对象创建unique_ptr的正确方法.怎么能这样做呢?上面的代码给出了以下错误: 1>c:\progr 以下代码给出了错误:

voID EntityContainer::AddChild(Entity* child) {     unique_ptr<Entity> childPtr(child);    children.push_back(childPtr);}

我认为这可能不是为现有对象创建unique_ptr的正确方法.怎么能这样做呢?上面的代码给出了以下错误:

1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0(617): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
解决方法 您无法复制唯一指针.因为它们是……独特的.但是,您可以移动它们:

children.push_back(std::move(childPtr));

这有点多余,所以你可以说:

children.push_back(std::unique_ptr<Entity>(child));

然而,安置施工已经提供了容器元件的直接构造:

children.emplace_back(child);

然而,这些都没有达到标准.问题实际上是你有一个静默获取某些东西的功能,并且在界面中完全不可见.所以你应该更改函数签名并让调用者明确地给你所有权:

voID EntityContainer::AddChild(std::unique_ptr<Entity> child) {     children.push_back(std::move(child));}

现在,如果用户获得所有权语义错误,则不再是您的错!

总结

以上是内存溢出为你收集整理的c – 从指针创建unique_ptr全部内容,希望文章能够帮你解决c – 从指针创建unique_ptr所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1218066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存