클래스에 다른 클래스에서 사용 된 생성자에 의해 초기화 된 std::unique_ptr
이 포함되도록하고 싶습니다. myPointer
생성자에서 설정되는 클래스의 소스 파일에 다음힙 할당 포인터가 필요하지만 스택 할당 포인터가 주어진다
class ObjectA
{
public:
ObjectA();
~ObjectA();
void SomeFunction();
private:
std::unique_ptr<ObjectB> myPointer;
}
및 SomeFunction()
에 사용 :
std::unique_ptr
를 포함하는 클래스를 가지고있다.
ObjectA::ObjectA()
{
ObjectC objectC;
myPointer = std::move(std::unique_ptr<ObjectB>(objectC.getPointer())); //setup pointer
}
ObjectA::~ObjectA() {}
void ObjectA::SomeFunction()
{
//use myPointer here
}
하지만 문제는 내가 SomeFunction()
에 myPointer
을 사용할 수 없다는 것입니다, 여기에 이유.
분명히 myPointer
은 생성자가 실행 완료시 파괴되지 않도록 힙에 할당되어야합니다. ObjectC
을 가정하고 결과적으로 함수는 외부 라이브러리에서 가져온 것입니다. ObjectC::getPointer()
을 호출하면 반환되는 포인터는 아마도 힙에 할당 된 스택에 할당됩니다. 지금은 생성자가 실행을 마친 직후에 오류가 발생하기 때문에이 경우라고 가정합니다.
기본적으로 나는 다른 곳에서 사용할 수있는 포인터를 제공하는 함수에 의존하고 있습니다. 그러나이 함수는 힙 대신 스택에 개체를 할당합니다.
이중 포인터로이 문제를 해결할 수있는 특별한 방법이 있습니까? 아니면 각 실행 블록 안에 포인터를 사용할 때마다 ObjectC::getPointer()
으로 전화해야합니까? 함수 내에서 많은 함수가있는 경우 myPointer
에 의존하는 함수 당 ObjectC::getPointer()
을 호출하면 중복 될 수 있지만 더 좋은 방법은이 문제를 해결할 수 있는지 모르겠지만 함수 (ObjectC::getPointer()
)가 강제해서는 안됩니다. 저 중복으로.
확실 해요'objectC'는 객체에 대한 가리키는 시간을 제어하지 않습니까? 그것이 사실 인 것처럼 보인다. 클래스의 멤버로서'ObjectC objectC'을 가지고 있어야합니다. 또한,'ObjectC objectC();'는'ObjectC objectC;'이어야합니다 (전자는 함수 선언입니다). –
ObjectB와 ObjectC가 어떻게 정의되어 있는지 알지 못해도 확실히 말할 수는 없습니다. –