似乎在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();
}
}
答案 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
}