C++中的new、operator new、placement new

操作符new

如果执行以下语句:

A* a = new A();

C++会执行以下两个步骤

1.调用operator new(这是一个函数,全局有一个定义,也可以在类中重载)分配内存。

2.调用A的构造函数。

类似的,操作符delete会先调用析构函数,再调用operator delete释放内存。

 

重载operator new

class A{
public:
    void* operator new(size_t size)
    {
        std::cout << "A::operator new" << std::endl;
        return malloc(size);
    }
};

ps: 使用::operator new可以指定使用全局的operator new函数。

 

placement new

placement new事实上不分配内存,它会根据传入的ptr来构造对象。

1.预先分配内存

char * buff = new [sizeof(A)];  // 也可以在栈中分配

2.调用placement new构造对象

A *a = new (buf) A

ps:在使用完后记得手动释放内存跟调用相应的析构函数。

posted @ 2016-10-18 16:41  Runnyu  阅读(172)  评论(0编辑  收藏  举报