错误:C2280创建unique_ptr到Class的向量

时间:2016-04-05 22:32:55

标签: pointers c++11 vector game-engine copy-constructor

似乎在vector<unique_ptr<UserInterface>>中使用unique_ptr时出现错误说明:

Error 1 error C2280: 'std::unique_ptr<UserInterface,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function c:\pr...ude\xmemory0 593 1 Win32Project1

貌似,没有配置允许我将[智能]指针存储到UserInterface类,它具有简单的结构:

#define InterfaceContruct vector<unique_ptr<UserInterface>>

class UserInterfaceMgmt
{
public:
    UserInterfaceMgmt();
    ~UserInterfaceMgmt();

    InterfaceContruct Interface;

    void AddUIElement();
    void RemoveUIElement();
    void DrawInterface();
    void MoveElement();
private:
};

即使没有调用任何函数,也会显示错误(InterfaceContruct Interface;已实例化)我尝试将复制构造函数放在private中,但它仍然存在。

.cpp文件是:

#include "stdafx.h"
#include "UserInterfaceMgmt.h"

UserInterfaceMgmt::UserInterfaceMgmt()
{
}

UserInterfaceMgmt::~UserInterfaceMgmt()
{
}

void UserInterfaceMgmt::DrawInterface(){
    for (UINT i = 0; i < Interface.size(); i++)
    {
        Interface[i]->Draw();
    }
}

1 个答案:

答案 0 :(得分:2)

std::vector(以及std::中的大多数其他容器)要求值类型是可复制构造的。 std::unique_ptr不是可复制的。使用std::shared_ptr或任何其他可复制的构造类型/指针。

线索是寻找attempting to reference a deleted function。这意味着有一些= delete已被使用的方法。例如:

struct Foo
{
    Foo(const Foo & rhs) = delete; // A deleted function
}