簡體   English   中英

std :: shared_ptr operator []等效訪問

[英]std::shared_ptr operator [] equivalent access

在C ++ 17中, std::shared_ptr有一個operator []來允許索引基於向量的指針( http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_at

如果這樣的操作符不可用,我如何獲得類似的訪問,我仍然想要使用智能指針來獲取元素數組,例如:

std::shared_ptr<unsigned char> data;
data.reset(new unsigned char[10]>;
// use data[3];

像這樣:

data.get()[3]

但是,請記住內森在評論中所說的話。 對於由new[]分配的指針, std::shared_ptr<unsigned char>的缺省刪除器是錯誤的。 你需要使用std::shared_ptr::reset(Y* ptr, Deleter d); 用適當的刪除器:

data.reset(new unsigned char[10], [](auto p){ delete[] p; });

或者,如果你不喜歡lambda的丑陋,你可以定義一個可重用的幫助器:

struct array_deleter {
    template<typename T> void operator()(const T* p) { 
        delete[] p; 
    }
};

// ...

data.reset(new unsigned char[10], array_deleter());

請改用shared_ptr<std::array<unsigned char, 10>>

或者shared_ptr<std::basic_string<unsigned char>>如果需要動態選擇的大小。

使用現代C ++,沒有充分的理由使用new,delete或naked數組。 如果你需要兼容性,總會有.data()。

暫無
暫無

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

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