所以我使用SFML和Boost库试图编写ResourceManager类。我使用std :: map来包含资源。我最近听说std :: unique_ptr真的很好,因为它有内存清理(或沿着这些行的东西)。
这就是我的ResourceManager类:
#pragma once
#include <boost/Any.hpp>
#include <map>
#include <memory>
#include <SFML/Graphics.hpp>
#include "Resource.h"
class ResourceManager
{
public:
ResourceManager();
void clear();
void dump();
boost::any getResource(std::string s);
sf::Texture loadTexture(std::string s, sf::IntRect d);
void unloadTexture(std::string s);
private:
std::map<std::string, std::unique_ptr<boost::any>> resource;
};
以下是我尝试将对象加载到地图中的方法
sf::Texture ResourceManager::loadTexture(std::string s, sf::IntRect d)
{
std::unique_ptr<sf::Texture> t;
if (!t->loadFromFile(s, d))
std::cout << "Error loading resource: " << s << std::endl;
resource[s] = t;
}
答案 0 :(得分:1)
std::unique_ptr
是一个仅限移动的时间,这意味着您无法复制它。
要解决此问题,请使用std::move
:
resource[s] = std::move (t);
如果可以像你那样复制,那么你会有两个unique_ptr
指向同一个对象(这是无意义的,因为它们是唯一的) ,所以你必须移动,调用move-assignment-operator。