为CHeapPtr创建自定义分配器(用于Sqlite)

问题描述 投票:0回答:1

我想使用sqlite3CHeapPtr创建一些智能指针。 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类,因此我想我将创建一些自定义分配器类,这些类继承自...

c++ winapi smart-pointers atl allocator
1个回答
0
投票

您不需要从CCRTAllocator继承,分配器应该只是一个新类。您可以使用ATL的COM heap allocator作为示例:

© www.soinside.com 2019 - 2024. All rights reserved.