[英]how to convert a boost::weak_ptr to a boost::shared_ptr
[英]how can i convert boost::array to boost::shared_ptr
boost::array<uint8_t,1000> buffer;
ByteBuffer b((boost::shared_ptr<uint8_t>)buffer.data(), buffer.size());
好吧,演員有點工作,但是當調試器 go 到方法結束時,它給了我一個錯誤,所以我想知道是否有其他方法可以轉換/轉換它以使其工作!
這是沒有意義的。 您正試圖通過應用任意強制轉換來“破解”錯誤。
shared_ptr
是指向動態分配對象的指針的包裝器。 它管理它們的動態生命周期。
array
是具有自動存儲持續時間的數組的包裝器。 它包裝的uint8_t
數組不是 memory 的動態分配塊。
因此,這種轉換是完全不合適的,並且會導致未定義的行為......即使您可以編譯它也是如此。 通常,使用 C++ 類型轉換,如static_cast
,它會以 C 類型轉換不會出現的錯誤轉換方式出錯。
(使用 C 強制轉換以使其“正常工作”是很誘人的,但實際上您通常做的是將頭埋在沙子中並在您的代碼崩潰成廢話時唱“啊哈”。)
為什么不只是:
ByteBuffer b(buffer.data(), buffer.size());
如果ByteBuffer
確實需要一個shared_ptr
作為輸入,那么您將不得不將數據存儲在一個由shared_ptr
控制的 memory動態塊中,或者將其復制到一個中以進行此操作。
我不確定您要做什么。 如果要創建一個 1000 uint8_t 的引用計數塊,則創建一個共享數組:
boost::shared_array<uint8_t>(new uint8_t[1000])
進行這項工作的唯一方法是以下。 我認為這是一個非常糟糕的主意:
boost::array<uint8_t,1000> buffer;
ByteBuffer b(boost::shared_ptr<uint8_t>(buffer.data(), [](uint8_t*){}), buffer.size()); // Note that the deleter does nothing.
什么是字節緩沖區? 那是來自其他地方的標准庫 class、class,還是您自己編寫的? 聲明是什么,它在實例化時期望什么類型?
在我看來,這聽起來像是一個 class 用於管理一大塊原始 memory - 但 boost:array 或 shared_array 已經這樣做了。 你真正想要達到什么目的?
我認為要么:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.