"allocator_traits::deallocate" 不是一个有效的 shared_ptr 删除器。"allocator_traits::deallocate" 是一个用于分配器的静态函数,用于释放由分配器分配的内存。
如果你想使用一个有效的 shared_ptr 删除器,你可以自定义一个删除器,并将其作为 shared_ptr 的模板参数之一。以下是一个示例:
#include
#include
struct MyDeleter {
void operator()(int* ptr) {
std::cout << "Deleting int pointer: " << *ptr << std::endl;
delete ptr;
}
};
int main() {
std::shared_ptr ptr(new int(5), MyDeleter());
return 0;
}
在这个示例中,我们定义了一个名为 MyDeleter 的删除器。该删除器重载了 () 运算符,使得它可以像函数一样调用。在 () 运算符中,我们删除了指针并打印了删除的值。然后,我们在创建 shared_ptr 时,将 MyDeleter 作为模板参数传递给 shared_ptr,从而指定了删除器。
当 shared_ptr 的引用计数变为 0 时,它将调用 MyDeleter 来删除指针,并执行相关的清理操作。
请注意,如果你使用的是标准的内存分配器(如 std::allocator),则不需要自定义删除器,因为 shared_ptr 已经知道如何使用 std::allocator 来释放内存。