C++ 同时使用智能指针和设置新处理程序

C++ 同时使用智能指针和设置新处理程序,c++,pointers,smart-pointers,C++,Pointers,Smart Pointers,您是否需要担心将set_new_处理程序与smart或auto pointer一起使用,或者库中包含了具有精细错误处理的处理程序 感谢C++中的智能指针(当前只是 AutoPtRt>代码>,但很快包括 SyddYPPT/和ValuePt >,默认情况下,都使用新< /C> >,这样它们将自动与全局新的处理程序进行接口。在使用这些类时,无需执行任何特殊操作来确保调用新的处理程序 希望这有帮助 我想你在担心一些无关的事情。新处理程序是一个详细信息,指定在找不到足够的内存进行分配时,operator

您是否需要担心将set_new_处理程序与smart或auto pointer一起使用,或者库中包含了具有精细错误处理的处理程序


感谢C++中的智能指针(当前只是<代码> AutoPtRt>代码>,但很快包括 SyddYPPT/<代码>和ValuePt >,默认情况下,都使用<代码>新< /C> >,这样它们将自动与全局新的处理程序进行接口。在使用这些类时,无需执行任何特殊操作来确保调用新的处理程序


希望这有帮助

我想你在担心一些无关的事情。新处理程序是一个详细信息,指定在找不到足够的内存进行分配时,
operator new
如何操作。智能指针是库提供的容器类。大多数C++标准库容器需要分配内存,它们通过分配器类以模块化方式进行。默认分配器可以(通常也确实)使用
new
来获取内存,但是内存分配和对象构造的过程是解耦的,任何库类中都不需要知道
new
操作符如何工作的任何细节,反之亦然


因此,无论您对新的操作符做什么(例如通过安装处理程序),都将透明地用于标准库构造,任何一方都不需要知道另一方的情况。

如果发生alloc异常,它会是一个核心转储还是一个非常精细的消息?Ta。我很确定auto_ptr不会抛出,因为它从不分配内存。在shared_ptr的情况下,我认为如果找不到内存(即使在调用新的处理程序之后),它只会抛出一个bad_alloc异常。这样,您可以尝试从错误中恢复,如在C++中分配失败时的默认行为。<代码> STD::StaskypTr> /Cord>允许指定分配器,这样您就不必使用默认分配器(它不必是“新”分配器),尽管它通常是)。我可以实现一个覆盖函数并将其传递给set_new_handler!?你可以这样做,但我强烈建议不要这样做。相反,只需在分配内存的位置放一条try/catch语句,并在错误实际发生时打印一条专门的错误消息。