C++中的new用法总结

2021-10-03 14:15

阅读:779

标签:operator   class   构造   size_t   返回   std   关键字   value   内容   前段时间复习面试的时候,看到这个问题经常有问到,我这个小白就看了些博客和书,总结一下。 new可以说是个一个关键字,也可以说是一个运算符,并且可以被重载。 1、new operator 这个就是平时最经常用的new,用法如下程序所示: 1 class A 2 { 3 public: 4 A(int i) :a(i){} 5 private: 6 int a; 7 }; 8 9 int main() 10 { 11 A* example = new A(1); 12 } new operator实际上执行了以下三个步骤: 1、调用operator new分配内存(后面要说的第二种new),如果类本身定义了operator new,那么会调用类自己的operator new,而不是全局的; 2、调用A的构造函数A::A(int); 3、返回相应的指针 2、operator new operator new不调用构造函数,而仅仅分配内存,有两个版本,前者抛出异常,后者当失败时不抛出异常,而是直接返回: void* operator new (std::size_t size); void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept; 可以看到,operator new的作用有点类似与C语言中的malloc,有的地方说operator new的底层实现可以是malloc。 C++中可以用set_new_handler()设置抛出bad_alloc()异常时调用的处理函数,有几个条款很详细描述了具体做法。 我还是太菜了,水平不够,不太能理解自定义异常处理函数的内容...T T 1 class A 2 { 3 public: 4 A(int i) :a(i){} 5 void* operator new(size_t size) 6 { 7 cout


评论


亲,登录后才可以留言!