我正在嘗試將型別變數更改unsigned char*為std::shared_ptr<std::vector<unsigned char>>用于記憶體管理。問題是,這段代碼是由幾年前離開的同事撰寫的,我不太確定如何管理某些方法的更改,因為我不熟悉它們。目前,我堅持使用這個函式從類中獲取影像的緩沖區BaseImage。
const unsigned char* BaseImage::getConstBuffer() const
{
if(m_bufferSize == 0) return 0;
else return m_bufferData m_headerSize;
}
和:
unsigned int m_bufferSize;
unsigned short m_headerSize;
unsigned char* m_bufferData = new unsigned char[(unsigned) m_headerSize m_bufferSize];
我不確定我們為什么要添加m_bufferData到m_headerSize,以及轉換后更改它的正確方法是什么。有人有想法嗎?
uj5u.com熱心網友回復:
如果你真的需要這個函式的呼叫者共享回傳值的所有權,那么你可以使用std::shared_ptr<unsigned char[]>. 更有可能的是,呼叫者只能觀察指向的資料,而不需要擁有它。在這種情況下,您可以std::vector<unsigned char>用作資料成員,并回傳一個跨度型別(std::span是 C 20,gsl::span需要 C 14 但可以適應 C 11)
class BaseImage
{
unsigned short m_headerSize;
std::vector<unsigned char> m_bufferData;
public:
BaseImage(size_t bufferSize, unsigned short headerSize) : m_headerSize(headerSize), m_bufferData(bufferSize headerSize) {}
span<const unsigned char> BaseImage::getConstBuffer() const
{
return { m_bufferData.data() m_headerSize, m_bufferData.size() - m_headerSize };
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516837.html
標籤:C 指针共享指针
上一篇:不使用指標訪問結構體陣列屬性
