`
kmplayer
  • 浏览: 497797 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款9:避免遮掩了new的正规形式

 
阅读更多
1,先看一种错误的情况:
#include <iostream>
using namespace std ;
class X
{
public:
    static void* operator new(size_t size,new_handler p){}
};

int main ()
{
    X* px=new X; //想调用global new,却不行.
	return 0 ;
}

2,
解决方法1:
写一个class专属的operator new,并支持"正规"形式.
#include <iostream>
using namespace std ;
class X
{
public:
    static void* operator new(size_t size,new_handler p);
    //正规形式
    static void* operator new(size_t size)
    {
        return ::operator new(size);
    }
};

int main ()
{
    X* px=new X; //想调用global new,却不行.
	return 0 ;
}

解决方法2:为new_handler提供默认参数值.
#include <iostream>
using namespace std ;
class X
{
public:
    static void* operator new(size_t size,new_handler p=0){}
};

int main ()
{
    X* px=new X; //想调用global new,却不行.
	return 0 ;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics