2012-12-10 36 views
5

如果我有代碼,將正常運作是這樣的:將shared_ptr傳遞給OpenGL?

char* log = new char[logLength]; 
glGetProgramInfoLog(..., ..., log) 
//Print Log 
delete [] log; 

我怎麼能做到用C++ 11智能指針同樣的結果?誰知道在我有機會刪除內存之前會發生什麼。

所以我想我需要向下轉換到一個C風格的指針?

+0

順便智能指針不是C++ 11獨家... – user1797612

+0

這不回答你的問題,但我會簡單地使用'矢量'如[這個例子](HTTPS: //github.com/progschj/OpenGL-Examples/blob/master/01shader_vbo1.cpp#L49)。 – 2012-12-10 12:50:28

回答

5

如果你的代碼真的看起來像你的代碼片段,shared_ptr對於這種情況來說有點矯枉過正,因爲它看起來像你不需要分配內存的共享所有權。 unique_ptr對於這種使用情況非常適合。當它超出範圍時,它將在託管指針上調用delete[]

{ 
    std::unique_ptr<char[]> log(new char[logLength]); 
    glGetProgramInfoLog(..., ..., log.get()); 
    //Print Log 
} // allocated memory is released since log went out of scope 
3

std::shared_ptr有一個方法get,你可以用它來獲得一個C風格的指針變量。如果該指針指向std::string,則需要進一步調用c_str()函數以獲取指向C風格字符串的指針。

編輯:我注意到該功能寫入字符串,而不是閱讀。您需要首先調整std :: string,甚至在此之後,the pointer returned by c_str isnt meant for writing。 std :: shared_ptr應該可以工作。

+0

對於編寫,您可以使用&str [0]。在C++ 11中,它很適合工作(標準要求分佈式存儲) – milleniumbug

相關問題