读书笔记:Effective C++ 2.0 版,条款9(避免隐藏标准形式的new)、条款10(new、delete对称定义)

条款9: 避免隐藏标准形式的new

#include 
#include 
#include 
class MyClass {
public:
    // 用户定义的带有参数的 operator new
    static void* operator new(std::size_t size, int extra) {
        std::cout << "Custom new with extra parameter\n";
        void* p = ::operator new(size);
        return p;
    }    
    // 使用 using 语句,明确地指出我们还想使用标准的 operator new
    using ::operator new; //只要这一句也可以
    static void * operator new(size_t size){ //定义inline函数也可以
    return ::operator new(size);
    }
    MyClass() {
        std::cout << "MyClass constructor\n";
    }
};
int main() {
    MyClass* obj1 = new MyClass; // 使用标准的 operator new
    MyClass* obj2 = new(10) MyClass; // 使用自定义的 operator new
    delete obj1;
    delete obj2;
    return 0;
}

条款10: 如果写了operator new就要同时写operator delete
方便自己管理内存,减少内存附加的信息(例如小对象的size信息)。
具体估计得根据编译器实现去检查衡量大量小对象的new、delete细节。
内存池需要考虑自己写对称的new、delete。

你可能感兴趣的:(cpp,c++)