我正在寫一個像std::shared_ptr這樣的智能指標,因為我的編譯器不支持c 17及以后的版本,我想支持陣列指標,就像:
myptr<char【】> (new char[10] )。
好吧,實際上很順利,直到我遇到了和舊版std::shared_ptr一樣的問題:
。
myptr<char []> (new char)。
是的,它不能區分它是一個普通的指標還是一個陣列指標,而且由于我的洗掉器有點像:
deleter = [](T *p) {delete[] p; }
這意味著它只是滿足了舊版std::shared_ptr的問題。
我的陣列指標的部分專業化就像:
我的陣列指標的部分專業化就像:
template <typename T, typename DeleterType>
class myptr<T[], DeleterType> { // DeleterType在主專業化中有一個默認引數。
// as std::function<void(T*)>
private:
my_ptr_cnt<T, DeleterType> *p; //這就是實際的指標和計數維護類。
public:
//建構式。
// ug here:: // ug here:.
my_ptr(T *p, DeleterType deleter=[](T *p) {delete []p;}) :
p(new my_ptr_cnt<T, DeleterType>(p, deleter)) { } }
}
uj5u.com熱心網友回復:
你不能。這就是原始陣列不好的眾多原因之一。
你可以做的是禁止從原始指標構造,而依靠make_shared類似的構造。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315446.html
標籤:
上一篇:指向c源檔案中的指標的指標
