操作符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:在使用完后记得手动释放内存跟调用相应的析构函数。

相关文章:

  • 2021-08-18
  • 2021-09-09
  • 2022-02-15
  • 2021-09-05
  • 2022-02-15
  • 2022-12-23
  • 2021-08-30
  • 2022-12-23
猜你喜欢
  • 2022-03-03
  • 2021-08-27
  • 2022-12-23
  • 2022-03-04
  • 2022-12-23
相关资源
相似解决方案