나는 스마트 포인터가없는 클래스를 사용하는 것을 방지하기 위해 노력해 왔습니다. 따라서 스마트 포인터에 의해 힙이 할당되고 관리되도록 오브젝트를 강제 설정하십시오. 는 이러한 결과를 얻기 위해서, 나는 다음 시도했다 : 꽤 잘 당신은 단지 클래스 사용자가 std::unique_ptr
를 통해 클래스의 인스턴스를 조작 할 수있는 것인지스마트 포인터 인스턴스를 클래스에 강제로 적용하는 방법은 무엇입니까?
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
이 작품. 하지만 std::shared_ptr
에서는 작동하지 않습니다. 그래서 당신이 그런 행동을 취할 수있는 아이디어가 있는지 알고 싶습니다.
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
을하지만이 솔루션은 휴대용되지 않습니다 : 나는 다음을 수행한다 찾은 유일한 해결책은 (friend std::allocator_traits<A>;
이 unsufficient이었다 사용). 어쩌면 내가 잘못하고있는 것 같아.
좋은 솔루션 ... 좋아, 이건 STL에 대한 작동 못해하지만 난 항상 내 자신의 SharedPtr 구현을 위해 이것을 원했고 내 문제를 해결! – mmmmmmmm