별칭이 지정된 공유 포인터의 관리되는 개체를 가져 오려고합니다. 내 생각은 약한 포인터를 사용했다. 약한 포인터는 어떤 객체도 생성하지 않기 때문에 공유 포인터에서 약한 포인터를 생성하면 약 포인터가 앨리어싱 된 공유 포인터의 저장된 객체를 잊어 버려 약한 포인터를 잠그면 공유 된 포인터가 저장되고 관리됩니다 포인터. 하지만 내가 혼란스러워하는 결과. 약 포인터는 공유 포인터가 생성 된 것을 기억합니까? 그리고 앨리어싱 된 공유 포인터의 관리 객체를 얻는 방법이 있습니까?스마트 포인터의 예기치 않은 동작
template<class T> struct Deleter {
void operator()(T* p) const {};
};
Deleter<T> d {};
T t1 {};
T* p1 = &t1;
T t2 {};
T* p2 = &t2;
auto sp1 = std::shared_ptr<T>(p1,d);
auto sp2 = std::shared_ptr<T>(sp1,p2);
auto wp = std::weak_ptr<T>(sp2);
std::cout << sp1.get() << " " << sp2.get() << " " << wp.lock().get() << std::endl;
생산 0x7fff5798c958 0x7fff5798c948 0x7fff5798c948
무엇이 문제입니까? 당신은 어떤 다른 산출물을 기대 했습니까? – Barry
'0x7fff5798c958 0x7fff5798c948 0x7fff5798c958' –
'shared_ptr'과'weak_ptr'가 예상 한대로 작동하면 매우 나쁠 것입니다. 'shared_ptr'의 앨리어싱은 유용하지 않습니다. – StoryTeller