[英]from unique_ptr<char[]> to unique_ptr<const char[]>
將unique_ptr<char[]>
到unique_ptr<const char[]>
的最佳習語是什么?
用例:假設您在某個緩沖區中創建了一個 C 字符串。 為了確保在發生異常時進行適當的清理,該緩沖區可以是使用unique_ptr
引用。 構造字符串后,您可能希望將其移動到某個類成員,該成員聲明為unique_ptr<const char[]>
以避免進一步修改字符串。
這是我迄今為止最好的:
std::unique_ptr<const char[]> res;
std::unique_ptr<char[]> buf(new char[4]);
buf[0] = 'f';
buf[1] = buf[2] = 'o';
buf[3] = '\0';
res = std::unique_ptr<const char[]>(const_cast<const char*>(buf.release()));
簡單地移動似乎不起作用,可能是由於不同的刪除器類型。 即使省略從char
到const char
的顯式轉換也不起作用,如“unique_ptr< T const [] >”是否應該接受“T*”構造函數參數中所述?
有沒有更好的成語來實現我上面概述的內容? 我的代碼看起來很笨拙,而且考慮了這個概念最初聽起來是多么簡單而冗長。
Boost 的Smart Ptr庫具有通用的指針轉換函數,可以處理來自該庫和來自 STL 的智能指針。 特別是, const_pointer_cast
可以做你需要的:
#include <boost/pointer_cast.hpp>
// ...
res = boost::const_pointer_cast<const char[]>(std::move(buf));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.