我一直在努力防止用户使用没有智能指针的类。因此,强制他们让对象被堆分配并由智能指针管理。为了得到这样的结果,我尝试了以下方法:
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
如果您只希望您的类用户能够通过std::unique_ptr
. 但它不适用于std::shared_ptr
. 所以我想知道你是否有任何想法来获得这种行为。我发现的唯一解决方案是执行以下操作(使用friend std::allocator_traits<A>;
不足):
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
但是这个解决方案是不可移植的。也许我做错了。