【发布时间】:2018-08-10 04:15:39
【问题描述】:
我希望这段代码在内存被释放时打印“Hello world”-“Hello”,在main 中打印“world”。但是“Hello”永远不会被打印出来,这意味着我的释放器不会被调用。实现它的正确方法是什么?
#include <iostream>
#include <vector>
class MyAllocator : public std::allocator<uint8_t>
{
public:
void deallocate(uint8_t* data, std::size_t size)
{
std::cout << "Hello ";
std::allocator<uint8_t>::deallocate(data, size);
}
};
int main()
{
{
std::vector<uint8_t, MyAllocator> v(100);
}
std::cout << "world\n";
return 0;
}
我假设它只是调用默认的 std::allocator<uint8_t>::deallocate() 函数,但我没有看到阻止它并让它调用我的函数的方法。
【问题讨论】:
-
尽量不要说“不起作用”,这不是一个有意义的诊断。我已调整标题以更好地反映您的问题。
-
我认为制作自定义分配器比这更复杂,即stackoverflow.com/questions/21081796/…
-
我并没有真正看到他们的分配器和我的分配器之间的概念差异。当然,他们定义了模板和更多构造函数,但是如果 std::vector 需要调用我的类缺少的东西,它就不会编译。我错过了什么?
标签: c++ allocation allocator