Effective_C++:9、避免遮掩了new的正規形式

9、避免遮掩了new的正規形式

1、遮掩new的正規形式

        內部的一個聲明名稱,會遮掩外邊部的相同名稱。即若全局區域和class內部都有函數f(),成員函數可能會遮掩掉全局函數。
        因此,當給class加進一個operator new時,將不經意間妨礙調用new正規形式的能力。
class X {
public:
    static void * operator new (size_t size, new_handler p);
    ...
};

void specialErrorHandler();

X *px1 = new (specialErrorHandler) X;

X *px2 = new X;//錯誤,調用global版本,失敗!

2、避免遮掩了new的正規形式

        1.一種方法是寫一個class專屬的operator new,並利用重載,讓他支持正規調用形式。
class X {
public:
    static void * operator new (size_t size, new_handler p);
    static void * operator new (size_t size) {return ::operator new(size)}
};
        2.另一種方法是爲每一個額外的參數提供默認值。
class X {
public:
    static void * operator new (size_t size, new_handler p = 0);
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章