난 원시 포인터 멤버를 일부 스마트 포인터로 감싸서 개발 클래스 내에서 삭제되지 않도록하고 싶습니다. 포인터 아래 개체의 소유자가 클래스 외부에 있습니다. 따라서 boost::shared_ptr
및 std::auto_ptr
처럼 보이지 않습니다. 다음은 축소 된 예입니다.raw 포인터에서 weak_ptr <> 만들기
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
물론 컴파일 오류가 발생합니다. 원시 포인터 (있는 경우)에서 weak_ptr
을 초기화하는 올바른 방법은 무엇입니까?
가능한 중복을 할 수있다 전환] (http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
클래스 내에서 해당 포인터의 삭제를 방지하려면 해당 클래스에서'delete'를 호출하지 마십시오. 클라이언트에 대한 포인터를 노출하는 접근 자 함수를 제공하지 마십시오. 'weak_ptr'은'shared_ptr'에 의해 소유 된 객체의 비 소유 뷰를위한 것입니다. 그 포인터를 어떻게 든'weak_ptr'에 넣을 수 있다면, 포인터가 만료되었는지도 모르며, 클래스 내에서'delete m_bar.lock(). get();을 호출하지 못하게 할 수 없습니다. 결코 100 % 바보 같은 것을 만들 수는 없습니다. – Praetorian