꽤 큰 코드이므로 약간의 코드를 생략 할 것입니다. 제 질문은 std :: make_shared의 작동과 관련이 있습니다. 내가 D3D11Shader라는 네임 스페이스 SYNC에 개체가 있습니다. 이 문자열의 인덱스를 가지고 SYNC에서 파생 된 쉐이더 :: D3D11Shader의 인스턴스에 대한 포인터를 반환합니다라는 정적 기능,std :: make_shared 추상 클래스 인스턴스화를 사용하는 중 오류가 발생했습니다.
SYNC::D3D11Shader * SYNC::D3D11Shader::CreateInstance(const std::string & s)
있습니다. 한 시점에서 나는 이러한 모든 쉐이더를 가지고있는 벡터 내에서 이들의 할당 해제를 자동화하기 위해 스마트 포인터를 사용하기 시작했습니다. 내가 이렇게 갈 때,
std::shared_ptr<SYNC::D3D11Shader> shaderPtr;
// ... verification of index and other initialization happens here
// so i am unable to initialize it in it's constructor
shaderPtr = std::make_shared<SYNC::D3D11Shader>(SYNC::D3D11Shader::CreateShader(shaderName));
컴파일러 오류
내가 추상 클래스입니다이 줄 D3D11Shader의 인스턴스를 실체화하기 위해 노력하고 있다는 말. 나는 모든 make_shared가 std :: shared_ptr의 인스턴스를 리턴했다고 생각했다. CreateInstance 함수는이 클래스의 인스턴스를 생성하려고 시도하지 않으며,이 클래스를 파생하고 구현하는 개체 만 만듭니다. 이 함수와 스마트 포인터를 사용하기 전에이 오류가 발생하지 않았습니다. 아무도 여기서 무슨 일이 일어나는 지 알아? 충분히
make_shared http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared 또는 http://msdn.microsoft.com/en-us/library/ee410595.aspx –
의 문서를 확인하십시오. 정의의 핵심 문구가 "개체를 만듭니다." 어쨌든 단순히 초기화 후 shared_ptr을 포인터로 설정하는 것입니까? – FatalCatharsis
기존에 shared_ptr의 생성자가 있다면 shared_ptr의 생성자를'shared_ptr ptr (your_pointer_here); 또는'ptr.reset (your_pointer_here);를 직접 사용하십시오. –