我具有如下所示的存储结构。
struct memoryStruct {
uint8_t* memory;
size_t size;
};
我的代码要求我在代码中的多个位置调用free(memory)
。为了避免这种情况,我正在考虑将其包装在unique_ptr
中。
我有以下内容
struct memoryStruct {
uint8_t* memory;
size_t size;
};
struct memoryStructDeleter {
void operator()(memoryStruct* p) const
{
free(p);
}
};
如何初始化如下所示的m_chunk。我想为内存字段分配大小为using malloc
的内存,并相应地更新大小。
std::unique_ptr<memoryStruct> m_chunk;
假设您根本无法更改结构(您应该,如果可以的话),并且只想调用malloc
和free
而不是new
和delete
(它们是上等的),则可以执行以下:
struct memoryStructDeleter {
void operator()(memoryStruct* p) const
{
if(p) {
if(p->memory) {
free(p->memory);
}
free(p);
}
}
};
std::unique_ptr<memoryStruct, memoryStructDeleter> create(size_t s) {
std::unique_ptr<memoryStruct, memoryStructDeleter> ret(malloc(sizeof(memoryStruct)); // may have to cast that pointer
if(!ret) {
return nullptr;
}
ret->memory = static_cast<uint8_t*>(malloc(s*sizeof(uint8_t)));
if(ret) {
return ret;
} else {
return nullptr;
}
}