아이디어는 내가 포인터가 아니었던 것처럼 std::shared_ptr
으로 싸여진 클래스를 여전히 사용할 수 있다는 것입니다. 내 수업에 정의 된 은 내 수업이 std::shared_ptr
으로 감싸 진 후에도 계속 사용할 수 있습니다.std :: shared_ptr로 랩핑 된 클래스의 연산자 오버로딩
template <class Ty> class shared_ptr_proxy : public std::shared_ptr<Ty> {
public:
template<class Other> shared_ptr_proxy& operator=(const Other& rhs)
{
(*this->get()) = rhs;
return *this;
}
template<class Other> explicit shared_ptr_proxy(Other * ptr)
: std::shared_ptr<Ty>(ptr){};
};
// usage :
shared_ptr_proxy<float> obj = shared_ptr_proxy<float>(new float);
obj = 3.14;
의 작업
,하지만 난 shared_ptr_proxy
또는 이 std::shared_ptr
에서 클래스를 상속 만들 필요가 없습니다 방법은 무엇입니까?
및
내가 이런 식으로한다면, 내가 알아서해야주의해야 할 점은 무엇입니까?
왜 포인터를 역 참조할만한 이유가 있습니까? '* ptrA = * ptrB;'? – RobH
이라는 아이디어는 실제로는 포인터라는 사실을 숨기는 것이기 때문에 – uray
실제로 포인터라는 사실은 일반적으로 공유 가능한 데이터에 대한 기능입니다. 그렇지 않으면, 다른 객체가 같은 것에 별명을 붙일 수 있다는 것이 명백하지 않으므로'a = b'가'c'의 값을 변경할 수 있습니다. 의심의 여지가 당신이 그것을 포인터로 숨기고 싶은 경우가 있습니다. 가장 명백한 것은 실제로 공유되지 않는다는 것입니다 (shared_ptr을 사용 했음에도 불구하고), 그것은 pImpl입니다. –