2015-12-12 56 views
0

我有一個C++程序,我需要爲日誌(char *)分配內存。使用共享指針進行運行時數組分配

我讀了關於std::shared_ptr以及他們將如何處理一旦範圍被刪除的內存刪除。

下面的代碼會在範圍離開後自動釋放日誌緩衝區嗎?

std::shared_ptr< char * > pLog = 
    std::shared_ptr< char * > (new char[logLength+1]); 

我知道這可能有點簡單,但我不太確定如何確認它是否有效。

+1

[共享\ _ptr到陣列?:它應該被用來]的可能的複製(http://stackoverflow.com/questions/13061979/shared-ptr-to-an-array-should-it-被使用) –

+0

'std :: shared_ptr'很難與動態數組一起使用;默認情況下'std :: shared_ptr '模擬單個'T'對象,而不是數組。 (你需要通過一個合適的數組刪除器;例如[見這裏的例子](http://en.cppreference.com/w/cpp/memory/default_delete)。)'std :: experimental :: shared_ptr'支持數組類型'T []'(像'std :: unique_ptr'),並且有一個更方便的請求正確的刪除方法。 –

回答

1

您可以考慮改用std::unique_ptr。它將處理剩餘範圍內的內存刪除操作,但採用更簡單的方式。共享指針創建並維護一個特殊的描述符對象。你不需要這個簡單的本地緩衝區。

auto buff = std::make_unique<char[]>(buffSize);