【发布时间】:2014-06-28 08:06:07
【问题描述】:
我正在尝试将基于范围的迭代器与一组 unique_ptr 实例一起使用,但出现以下编译错误:
C2280: 'std::unique_ptr<Component,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function
基本代码如下:
#include <set>
#include <memory>
std::set<std::unique_ptr<Component>>* m_components;
class Component
{
void DoSomething(){};
};
void ProcessComponents()
{
for (auto componentsIterator : *m_components)
{
componentsIterator->DoSomething();
componentsIterator++;
}
}
知道为什么这会是一个问题或如何解决它吗?
【问题讨论】:
-
std::set<std::unique_ptr<Component>>*- 很可能,set本身不需要是指针。此外,您使用智能指针保存set中的元素但决定手动管理set的内存,这很奇怪。 -
@Praetorian,集合实际上是一个类的成员,在析构函数中创建和销毁类时初始化。我试图创建一个简单的例子来说明我的问题。这似乎是正确的方法,但我有点初学者,所以如果有更好的方法,请告诉我。
-
std::set<std::unique_ptr<Component>> m_components是更好的方法。它将与您的类实例一起被实例化和销毁,不再需要new和delete。 -
太棒了!谢谢你的提示。我第一次在这里发帖。刚刚创建了一个帐户,并且已经对它的响应速度和资源价值感到惊讶。
标签: c++ c++11 set unique-ptr deleted-functions