簡體   English   中英

原始指針和shared_ptr之間的C ++接口

[英]C++ interface between raw pointers and shared_ptr

我有整個使用原始指針的代碼。

它需要調用一個將原始指針轉換為shared_ptr的方法。 這種方法不在我的控制之下,屬於外部api。 我不能只是將指針傳遞給shared_ptr,因為當shared_ptr超出方法范圍時(當方法返回時)它將被刪除。

除了在我的內部代碼中將原始指針設為shared_ptr之外,我還有其他選擇嗎?

這聽起來有點不尋常並且可能非常危險,但是您可以通過在構造shared_ptr時使用no-op刪除器來實現此目的:

struct no_op_delete
{
    void operator()(void*) { }
};

int* p = 0; // your pointer
std::shared_ptr<int> sp(p, no_op_delete());

sp和由它構成的所有副本都被銷毀時,將調用no_op_delete來清理保持的指針。 由於它什么都不做,你得到了你需要的行為。

詹姆斯已經回答了這個問題。 所以,這只是一個建議。 如果您知道函數調用沒有修改對象(比如設置一些數據成員等),您可以從原始指針創建一個新對象,並通過shared_ptr將其傳遞給該函數。 這樣,您假設該函數獲取對象的所有權並執行所需的任何操作。 當然,如果函數將修改其中的對象,則這不起作用。 如果函數使用對象作為只讀來執行某些其他操作(例如文件I / O),這可以工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM