gpt4 book ai didi

c++ - 替换函数 'operator new' 无法声明 'inline' [-Werror,-Winline-new-delete]

转载 作者:太空狗 更新时间:2023-10-29 21:17:57 27 4
gpt4 key购买 nike

我在使用 clang 时遇到了这个错误。为什么不能将 operator new 声明为内联?

./test.h:198:1: error: replacement function 'operator new' cannot be declared 'inline' [-Werror,-Winline-new-delete]
__forceinline void *operator new(size_t size) { return malloc(size); }
^
./test.h:18:23: note: expanded from macro '__forceinline'
#define __forceinline inline __attribute__((__always_inline__))

^

最佳答案

整个程序中分配函数的所有使用都必须兼容。在一个翻译单元中用 operator new 分配的东西必须在另一个 TU 中用 operator delete 解除分配。因此,程序必须在任何地方都给出相同的实现,并且分配函数的替换不是 TU 局部的事情,而是全局的选择。

因此,与其要求每个 TU 都包含相同的代码(这会破坏静默、非侵入性替换的目的,而且违反该代码将极难诊断),不如要求函数具有外部链接和不是内联的。

将分配函数视为程序全局状态的一部分。

关于c++ - 替换函数 'operator new' 无法声明 'inline' [-Werror,-Winline-new-delete],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com