2013-03-13 35 views
-1

如何判斷一個指針是RValue還是我不知道我在說什麼..這個真正荒謬的想法一邊喝着啤酒一邊衝進我的腦海......RValue指針?

如果你有一個愚蠢的程序員/用戶..

假設你有下面的類:

template<typename T> 
class Container 
{ 
    private: 
     std::vector<T> Storage; 
    public: 
     Container(T Anything) : Storage() {Storage.push_back(Anything);} 
} 

和用戶執行:

Container<Object*> C(new Object(Params)); 

那我該怎麼DELET e嗎?我想能夠區分上面和下面的區別:

Object* O = new Object(Params); 
Container<Object*> C(O); 

我只是想知道。我知道第一個例子顯然不應該被使用,但我們假設它會或者我想要檢測這樣的泄漏代碼並刪除它們。

這怎麼辦?這是一個RValue指針嗎?我該怎麼稱呼它?

+2

'Container C(new Object(Params));'是無意義的 - 你必須指定'T'是什麼類型,那它是什麼? – ildjarn 2013-03-13 03:37:35

+0

在這種情況下,T是一個指針.. Ooohh你的意思是像容器(新的對象())? – Brandon 2013-03-13 03:38:34

+0

噢..我修好了。對不起:( – Brandon 2013-03-13 03:40:12

回答

3

最容易也是最正確的事情就是在像shared_ptr這樣的資源容器中包裝裸指針。

+0

不,因爲那樣你會刪除一個託管指針,你不想刪除每個指針..只有愚蠢的漏洞 – Brandon 2013-03-13 03:38:02

+1

@CantChooseUsernames:如果它是共享的,只會在_every_實例超出範圍時纔會被刪除。 – ildjarn 2013-03-13 03:40:24

+0

shared_poiner只在資源計數達到零時刪除。 auto_ptr或unique_poiner提供單一資源所有權。 – 2013-03-13 03:42:35