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


在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




你可能感兴趣的:(webkit,C++,类继承)