以下代码给出了错误:
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)); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。