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

    xiaoxiao2021-03-25  117

    在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

    转载请注明原文地址: https://ju.6miu.com/read-8974.html

    最新回复(0)