c++保存对象的分配和删除
c++ saving object allocation and deletion
我目前正在开发一个小游戏,我需要一些 class/struct 经常分配和删除。
我想知道这是一种保存删除的方法,也许将删除对象放入容器中,并在我想分配 class.
的实例时尝试在该容器中获取
我在考虑 new 和 delete 运算符的重载。但是我有一个小问题,如果我重载删除运算符(将 "deleted" 对象放入容器中),如何删除它?我应该通过适当的功能来做到这一点吗?
您可以随时为您的对象创建一个免费列表。然后当你想删除一个对象时,将它添加到空闲列表中。如果您知道您永远不会再使用该对象,请释放内存并且不要将其添加到列表中。
也许如果您告诉我们更多关于 allocation/deallocation 背后的逻辑,我们也可以帮助您找到更好的方法。比如你在分配什么对象?是不是同一个东西只是值不同?
您可以通过两种方式进行处理
1) 对象池。当你 "allocate" 你从池中取出一个对象,当你解除分配时 return 它回到池中。这不是那么透明,但实施起来并不难。
2) 为您的 classes/structs 创建自定义分配器。您在一个大缓冲区中预先分配内存,当您需要分配时,您从那里获取内存,当您需要释放内存时 return 返回内存(实际机制取决于您)。这实现起来有点困难,但可以更透明。
检查以下链接以获取想法
- http://www.drdobbs.com/policy-based-memory-allocation/184402039
- http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess/allocators_containers.html
- http://en.cppreference.com/w/cpp/memory/allocator
- http://yosefk.com/blog/why-custom-allocatorspools-are-hard.html
此外,当您阅读时,还有一本 Alexandrescu 的好书
http://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315
有点旧,但仍然很特别,并且有一个记忆部分 management/allocator。
使用这个简单的界面制作 class:
class allocator
{
object* get();
void release(object*);
};
现在,对象何时实际销毁以及何时存储以供日后重用的决定由该容器决定。这也清楚地表明对象来自何处,即它们由该分配器管理。
我目前正在开发一个小游戏,我需要一些 class/struct 经常分配和删除。 我想知道这是一种保存删除的方法,也许将删除对象放入容器中,并在我想分配 class.
的实例时尝试在该容器中获取我在考虑 new 和 delete 运算符的重载。但是我有一个小问题,如果我重载删除运算符(将 "deleted" 对象放入容器中),如何删除它?我应该通过适当的功能来做到这一点吗?
您可以随时为您的对象创建一个免费列表。然后当你想删除一个对象时,将它添加到空闲列表中。如果您知道您永远不会再使用该对象,请释放内存并且不要将其添加到列表中。
也许如果您告诉我们更多关于 allocation/deallocation 背后的逻辑,我们也可以帮助您找到更好的方法。比如你在分配什么对象?是不是同一个东西只是值不同?
您可以通过两种方式进行处理
1) 对象池。当你 "allocate" 你从池中取出一个对象,当你解除分配时 return 它回到池中。这不是那么透明,但实施起来并不难。
2) 为您的 classes/structs 创建自定义分配器。您在一个大缓冲区中预先分配内存,当您需要分配时,您从那里获取内存,当您需要释放内存时 return 返回内存(实际机制取决于您)。这实现起来有点困难,但可以更透明。
检查以下链接以获取想法
- http://www.drdobbs.com/policy-based-memory-allocation/184402039
- http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess/allocators_containers.html
- http://en.cppreference.com/w/cpp/memory/allocator
- http://yosefk.com/blog/why-custom-allocatorspools-are-hard.html
此外,当您阅读时,还有一本 Alexandrescu 的好书
http://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315
有点旧,但仍然很特别,并且有一个记忆部分 management/allocator。
使用这个简单的界面制作 class:
class allocator
{
object* get();
void release(object*);
};
现在,对象何时实际销毁以及何时存储以供日后重用的决定由该容器决定。这也清楚地表明对象来自何处,即它们由该分配器管理。