2016-07-04 1 views
-1

그래서 SFML과 Boost 라이브러리를 사용하여 ResourceManager 클래스를 작성하려고합니다. 나는 자원을 포함하기 위해 std :: map을 사용하고있다. 나는 최근에 std :: unique_ptr이 메모리 정리 (또는 그 라인을 따르는 무언가) 때문에 정말 좋다고 들었다. 이 제는 ResourceManager 클래스는 모습입니다std :: unique_ptr std :: map 내부에 배치하는 동안 오류가 발생 했습니까?

: 여기

#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; 
} 

그러나 여기이 오류에서 얻을 이 줄 : http://i.imgur.com/0uDZvvw.png

+0

한숨, 나는 내가 어떻게 unique_ptr을 사용하고 있었는지 지진이 있다고 생각했다. 내가 따라야 할 정확한 가이드가 없지만 내 게시물을 업데이트하여 내 문제를 설명하는 업데이트를하겠습니다. <3 – Honor

+0

아니요, 몇 분만 기다려주세요. 당신이하는 방식이 아닙니다. 동적 메모리 할당이 없다면, 'unique_ptr'은 의미가 없습니다. 또한 실제 사용 사례를 찾을 때'std :: make_unique'를 살펴보십시오. 어쩌면 * 당신이 현재하고있는 일보다는 * 당신이하고 싶은 일을 설명해야 할 것입니다. –

+1

음, 추측에 의한 프로그래밍이 작동하지 않습니다. 그리고 "지체 된"것과 같은 혐오스럽고 불명예스러운 용어를 사용하지 않겠습니까? –

답변

1

std::unique_ptr은 이동 전용 시간이므로 복사 할 수 없습니다. 당신은 그들이 을하기 때문에 난센스 인 (동일한 개체를 가리키는 두 개의 unique_ptr 's의 것, 당신이했던 것처럼

resource[s] = std::move (t); 

가 복사 할 수있는 경우를 해결하기 위해

, std::move 사용 unique)이므로 move 이동 할당 연산자를 호출해야합니다.

+0

아하 !! 그게 다야, 고마워! 나는 upvote하지만 더 이상 15 담당자가 없습니다; – Honor

+0

@ 답변 답변이 귀하의 질문에 대한 답변이라면, 귀하는 그 질문에 반드시 표시해야합니다. –

관련 문제