SPM*_*PMP 3 c++ memory-management c++11
我正在尝试为特定类编写自定义分配器。我对分配器的经验基本上没有,所以这可能很明显。
我希望我的分配取决于某些参数。粗略地说,我希望有多个内存管理器,每个管理器管理几个对象。创建对象时,我将知道该对象应该属于哪个管理器。在阅读了大量关于重载的内容后operator new,我不知道如何实现我需要的东西。
这个页面说有一个版本operator new可以接受用户定义的参数,但似乎在使用new. 有人能指出如何构造除全局分配器以外的任何东西吗?在相关说明中,如果我使用重载的类特定的,如何调用参数化构造函数operator new?
您可以通过定义一个重载来创建一个自定义的分配器,该分配器接收额外的参数,operator new如下所示:
void* operator new (size_t size, /* extra parameters here */) {
/* Do something, then return a pointer to at least 'size' bytes. */
}
Run Code Online (Sandbox Code Playgroud)
然后您可以通过编写使用您的分配器
MyObject* obj = new (/* extra params */) MyObject(/* constructor args */);
Run Code Online (Sandbox Code Playgroud)
例如,这是一个愚蠢的自定义分配器,它在您分配一些东西时打印出一条消息:
void* operator new(size_t numBytes, const std::string& message) {
std::cout << "Custom message: " << message << std::endl;
/* Use the default allocator to get some bytes. */
return ::operator new(numBytes);
}
Run Code Online (Sandbox Code Playgroud)
你可以通过写作来调用它
std::complex<double>* obj = new ("Hello, world!") std::complex<double>(0.0, 0.0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |