【发布时间】:2017-05-16 04:35:47
【问题描述】:
如何将我的程序编码为可以灵活地提前接收自定义分配器?
我编写了一些分配器,但不确定我是否真的需要它。
但是,我确信如果我的自定义分配器将被插入,我想在某些部分使用它。
示例
例如,int* B::db 应使用自定义分配器 (myNew/myDelete),
而所有std::vector 都应该使用标准分配器。
虽然我仍然没有插入我的自定义分配器,但我希望我的程序将使用标准 new/delete 作为默认值。
#define myNew new
#define myDelete delete
class B{ //B should not be a template class
int* db=nullptr;
std::vector<float> something; //<- let it use default new/delete
public: B(){
db=myNew int[5]; //work like "db=new int[5];"
}
public: ~B(){
myDelete[] db; //work like "delete[] db;"
}
};
如果我想稍后插入自定义分配器,我可以更改 #define。
注意:B 不应是模板类。
问题
我不确定这是否是正确的方法。我对分配器还是很陌生。
如果可能的话,我也想避免使用宏。
这是一个很好的解决方案吗?有没有没有宏的解决方案?
我可以让我的程序只使用new/delete 作为默认值,我可以稍后对其进行重构。
不过,以后可能会是个脑洞大开的作品。
注意:大多数 Q/A 似乎都集中在重载全局 new/delete。那不是我想要的。 :-
- overloading new/delete
- How to properly replace global new & delete operators
- Using operator new and operator delete with a custom memory pool/allocator
对不起,如果这个问题太新手了。
我还没有找到任何关于在 real 实践中使用分配器的好的教程/信息。
我也读过(它们只是分配器+代码的理论):-
【问题讨论】:
-
实际上不明白你在问什么
-
@Passer 很抱歉听到这个消息。简而言之,问题是“如何制作一个程序来轻松打开和关闭自定义分配器?”
标签: c++ memory-management maintainability