如何为我的类实现自定义内存分配?我见过两种广泛使用的方法:使用自定义分配器,就像所有STL容器所做的那样,将其作为模板类型参数的一部分。或者重载
我们被告知,在C++中,通常应该使用
C++核心指南唯一提到这个问题的地方是this(即没有提到)。我真的找不到其他什么资料了。那么线程安全和安全性呢?我得出结论,(自定义)内存管理可能是高级C++中最重要的方面,因此我必须确切地了解自己在做什么。
我的问题是,在管理自己的类的内存时,选择哪种方法更好:实现自定义内存分配器(类似于
new
和delete
函数,可能还包括放置new
和放置delete
。我已经访问并阅读了很多关于这两种技术的问题和答案,但我无法确定在特定情况下应该使用哪种技术。显然,所有STL容器都是根据自定义分配器设计的。但是,为什么不重载new
和delete
(等等),以满足您的内存需求呢?对我来说,重载new
和delete
可以完成分配器能完成的一切,事实上可能更容易,更少麻烦。这可能在C++17中尤其正确,因为它带有大量可能的重载,甚至可以指定对齐要求、nothrow标记版本等。我们被告知,在C++中,通常应该使用
new
和delete
进行典型的堆分配(或更频繁地使用智能指针,但这不是一个“智能”的讨论,而是低级别的)。但是如果我们使用分配器来代替.allocate()
来分配对象,然后使用.construct()
构造(我相信最后一个函数现在已经过时了)。我们本质上正在做与new std::string{"Hello"}
相同的事情。C++核心指南唯一提到这个问题的地方是this(即没有提到)。我真的找不到其他什么资料了。那么线程安全和安全性呢?我得出结论,(自定义)内存管理可能是高级C++中最重要的方面,因此我必须确切地了解自己在做什么。
我的问题是,在管理自己的类的内存时,选择哪种方法更好:实现自定义内存分配器(类似于
stl
容器),还是重载new
、delete
、new[]
、delete[]
、放置new
等。为什么?在何时何地使用其他好的实践和指南也会非常有帮助。提前感谢您。
new
等操作符。但是,我也不喜欢分配器。类管理内存还有其他方法,最终真的取决于该类的角色。 - undefined