C++ 覆盖全局新建/删除运算符的后果

C++ 覆盖全局新建/删除运算符的后果,c++,new-operator,delete-operator,C++,New Operator,Delete Operator,我对覆盖全局new/delete操作符的后果感兴趣。让我们假设: 代码重写这些运算符以使用自定义的通用分配器 代码还使用外部库 如果外部库分配了一块内存,它将使用哪个新操作符?让我们假设库返回该指针,要求用户删除它(在用户完成操作后),如果库使用“普通”新操作符,用户如何删除该内存(因为他的delete操作符版本非常不同) 如果编译代码以创建库,然后分发,那么这些全局新建/删除运算符将如何影响用户的代码 在这些场景中是否还有其他重要后果需要寻找?被替换的操作员在最后链接;如何将代码划分为库并不重

我对覆盖全局new/delete操作符的后果感兴趣。让我们假设:

  • 代码重写这些运算符以使用自定义的通用分配器
  • 代码还使用外部库
  • 如果外部库分配了一块内存,它将使用哪个新操作符?让我们假设库返回该指针,要求用户删除它(在用户完成操作后),如果库使用“普通”新操作符,用户如何删除该内存(因为他的delete操作符版本非常不同)

    如果编译代码以创建库,然后分发,那么这些全局新建/删除运算符将如何影响用户的代码


    在这些场景中是否还有其他重要后果需要寻找?

    被替换的操作员在最后链接;如何将代码划分为库并不重要。当您拥有真正的库时,我同意您的看法。但Windows上的DLL是特殊的动物(更接近于真正的可执行文件,而不是真正的库)。因此,如果一个DLL静态链接一个版本的运算符new/delete,而主exec(或另一个DLL)也静态链接另一个版本,则可能会出现死角情况;如何将代码划分为库并不重要。当您拥有真正的库时,我同意您的看法。但Windows上的DLL是特殊的动物(更接近于真正的可执行文件,而不是真正的库)。因此,如果一个DLL静态链接一个版本的运算符new/delete,而主exec(或另一个DLL)也静态链接另一个版本,则可能会出现死角情况。