我想使用sqlite3
为CHeapPtr
创建一些智能指针。 CHeapPtr
默认情况下使用CCRTAllocator
类,因此我想我将创建一些自定义分配器类,这些类从CCRTAllocator
继承但覆盖其Free
方法,以便它们使用适当的清除函数:] >
class CSqlite3Allocator : CCRTAllocator { public: static void Free(_In_ sqlite3* p) throw() { sqlite3_close_v2(p); } }; class CSqlite3StmtAllocator : CCRTAllocator { public: static void Free(_In_ sqlite3_stmt* p) throw() { sqlite3_finalize(p); } };
现在我可以像这样创建
CHeapPtr
了:
CHeapPtr<sqlite3, CSqlite3Allocator> psqlite; CHeapPtr<sqlite3_stmt, CSqlite3StmtAllocator> pstmt;
这些指针似乎正常工作,并且似乎正在调用其清理方法。我只是想知道这是否是执行此操作的正确方法,或者是否存在一种更受欢迎的创建自定义
CHeapPtr
的方法。谢谢您的投入。
我想使用CHeapPtr为sqlite3创建一些智能指针。 CHeapPtr默认情况下使用CCRTAllocator类,因此我想我将创建一些自定义分配器类,这些类继承自...
您不需要从CCRTAllocator
继承,分配器应该只是一个新类。您可以使用ATL的COM heap allocator作为示例: