[英]What can I do instead of this that's better, for my smart pointers?
問題問什么。 我知道這行得通,但這是好的做法還是壞的做法? 另一個我看到有人用的例子,我自己也一直在用,但感覺不對。
// in some header file
template <class T>
class ptr {
private:
T* pointer;
public:
explicit ptr (T* p = NULL) : pointer(p) { }
~ptr() { delete (pointer); }
T& operator *() { return *pointer; }
T* operator ->() { return pointer; }
};
// in some source file, probably main.cpp
ptr<Foo> foo(new Foo());
function(foo->self()); // using function(foo) doesn't work because it can't
// convert ptr<Foo> to Foo*
// somewhere inside definition of Foo
Foo* self() { return this; }
除非我包含self()
function,否則為什么它不起作用,如果沒有它,我如何將 object 傳遞給 function?
你必須制作一個指針類型的getter。
template<typename T>
class ptr {
...
const T* get() const { return pointer; }
T* get() { return pointer; }
}
function(foo->get());
new
. 創建一個制造商 function 像std::make_unique
, std::make_shared
。 可以從ptr<Foo>
fo Foo*
自動轉換:
template <class T>
class ptr {
private:
T* pointer;
public:
operator T*() { return pointer; }
// rest of code
但是擁有它會破壞智能指針的想法,因此標准庫中的智能指針類不包含它。 相反,他們有類似的東西
T* get() { return pointer; }
所以這樣的轉換是明確的。
大多數時候,您應該只使用標准庫類之一。 如果您需要創建自己的智能指針,建議避免包含operator T*()
(並且通常避免自動轉換)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.