[英]Using shared_ptr with char*
我無法創建:
shared_ptr<char> n_char = make_shared<char>(new char[size_]{});
我該如何創建
char* chr = new char[size_]{};
使用現代指針?
shared_ptr n_char = make_shared(new char[size_]{});
make_shared
在里面調用new
,所以你永遠不會同時使用兩者。 在這種情況下,您只調用new
,因為make_shared
不適用於數組。
但是,您仍然需要讓它調用正確的刪除:
在 C++17 之前:
您需要明確指定刪除器。
std::shared_ptr<char> ptr(new char[size_], std::default_delete<char[]>());
從 C++17 開始:
shared_ptr
獲得了類似於unique_ptr
從一開始就已經擁有的數組支持:
std::shared_ptr<char[]> ptr(new char[size_]);
請注意,以這種簡單的方式完成后,您不會跟蹤長度並且在多線程環境中不會同步。 如果您需要可修改緩沖區,使共享指針指向std::string
或其中包含std::string
和std::mutex
的結構,將增加一個間接級別,但使用起來會更方便。
您可以使用專門用於數組的std::default_delete
std::shared_ptr<char> ptr(new char[size_], std::default_delete<char[]>());
見std::default_delete 文檔。 雖然 std::unique_ptr 在沒有指定其他刪除器時默認使用 default_delete 並且具有處理數組類型的部分特化:
std::unique_ptr<char[]> ptr(new char[size_]);
使用 std::shared_ptr 您需要通過將刪除器傳遞給構造函數來手動選擇它。
編輯:感謝 Jan Hudec, c++17 還包括對數組類型的部分特化:
std::shared_ptr<char[]> ptr(new char[size_]); // c++17
對於簡單的字符緩沖區:
std::shared_ptr<char> ptr( (char*)operator new( buffer_size_here ) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.