C2385, C++多继承中的 new delete 不明确问题

1 篇文章 0 订阅
1 篇文章 0 订阅


在webkit项目中,会经常遇到一些多重继承的类,以及多如牛毛的智能指针。还有一些WTF中定义的宏函数,比如 WTF_MAKE_FAST_ALLOCATED
类的多继承中,除了普通函数的 member 访问不明确问题,还 有一种是 new delete的类型访问不明确,大家可能很少见,毕竟父子类的构造函数和析构函数名不可能 相同。但是如果引用了上面这个宏,那么久很可能会出现new delete 访问不明确的编译问题。看一下这个宏函数的实现,因为其重载了该类的new 和 delete 操作符,导致如果父类子类声明中有一个类引用了这个宏,而另一个类没有引用这个宏,那么就会形成二义性问题。编译器会提示new 或delete 访问不明确。

解决方法: 在webkit项目中,父类中如果使用了这个宏,那么子类应该与父类保持一致,也加上这个宏。除此之外,请大家一定要注意webkit项目中出现的宏函数,在弄清楚其作用之前,各种问题都可能会出现的。

#define WTF_MAKE_FAST_ALLOCATED \
public: \
    void* operator new(size_t, void* p) { return p; } \
    void* operator new[](size_t, void* p) { return p; } \
    \
    void* operator new(size_t size) \
    { \
        void* p = ::WTF::fastMalloc(size); \
         ::WTF::fastMallocMatchValidateMalloc(p, ::WTF::Internal::AllocTypeClassNew); \
        return p; \
    } \
    \
    void operator delete(void* p) \
    { \
        ::WTF::fastMallocMatchValidateFree(p, ::WTF::Internal::AllocTypeClassNew); \
        ::WTF::fastFree(p); \
    } \
    \
    void* operator new[](size_t size) \
    { \
        void* p = ::WTF::fastMalloc(size); \
        ::WTF::fastMallocMatchValidateMalloc(p, ::WTF::Internal::AllocTypeClassNewArray); \
        return p; \
    } \
    \
    void operator delete[](void* p) \
    { \
         ::WTF::fastMallocMatchValidateFree(p, ::WTF::Internal::AllocTypeClassNewArray); \
         ::WTF::fastFree(p); \
    } \
private: \
typedef int ThisIsHereToForceASemicolonAfterThisMacro




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值