【发布时间】:2016-05-28 20:47:40
【问题描述】:
仅出于教育目的,我正在编写一个小型智能指针类,目前不是共享的,只是像 C++ 11 中的 unique_ptr 这样的简单类。 我想要的不是一个完整的实现,而只是基础,创造, 默认/自定义删除等。
我一直在尝试查看 Microsoft Visual Studio 中标准的实施,我确实掌握了一般实施,但我被卡住了 使用默认/自定义删除。 所以我的问题是,实现这种功能的最佳技术是什么?
仅出于教育目的可以轻松实现它,还是最终它太复杂且不值得?
干杯
嗨,阿米,
你对这样的事情有什么看法?
template <class _Ty>
struct default_delete
{
constexpr default_delete() = default;
void operator()(_Ty* Ptr)
{
std::cout << "Default Delete" << std::endl;
}
};
template <class T, class _Dl=default_delete<T>>
class Smart_Pointer2_Base;
template <class T, class _Dl>
class Smart_Pointer2_Base
{
T *ptr; // Actual pointer
_Dl _deleter;
public:
// Constructor
explicit Smart_Pointer2_Base(T *p = NULL) { ptr = p; }
Smart_Pointer2_Base(T* p, _Dl) { prt = p; _deleter = _Dl; }
// Destructor
~Smart_Pointer2_Base() { _deleter(ptr);}
// Overloading dereferencing operator
T & operator * () { return *ptr; }
T * operator -> () { return ptr; }
};
int main()
{
struct CloserStruct {
void operator()(int* toDelete) { std::cout << "Custom Delete"<<std::endl; }
};
smtpr::Smart_Pointer2_Base<int, CloserStruct> pi(new int(5));
return 0;
}
【问题讨论】:
-
@Arif_Khan 您刚刚链接了这个问题。也许很快就会有一个有效的答案;)
标签: c++ c++11 std unique-ptr