【发布时间】:2020-08-25 21:29:17
【问题描述】:
我想使用CHeapPtr 为sqlite3 创建一些智能指针。 CHeapPtr 默认使用 CCRTAllocator 类,所以我想我只是创建一些自定义分配器类,它们继承自 CCRTAllocator 但覆盖其 Free 方法,以便它们使用正确的清理功能:
class CSqlite3Allocator : public CCRTAllocator
{
public:
static void Free(_In_ sqlite3* p) throw()
{
sqlite3_close_v2(p);
}
};
class CSqlite3StmtAllocator : public CCRTAllocator
{
public:
static void Free(_In_ sqlite3_stmt* p) throw()
{
sqlite3_finalize(p);
}
};
现在我可以像这样创建CHeapPtrs:
CHeapPtr<sqlite3, CSqlite3Allocator> psqlite;
CHeapPtr<sqlite3_stmt, CSqlite3StmtAllocator> pstmt;
这些指针似乎工作正常,并且似乎正在调用它们的清理方法。我只是想知道这是否是正确的方法,或者是否有更可接受的方法来创建自定义CHeapPtrs。感谢您的任何意见。
【问题讨论】:
-
对于Code Review 来说听起来是个好问题。
标签: c++ winapi smart-pointers atl allocator