zoukankan      html  css  js  c++  java
  • C++ 构造与析构函数

    这两个概念并不对等,构造函数可以完全控制成员构造过程(通过初始化列表),析构函数准确说应该叫析构之前被调用的函数

    一般不应该手动调用析构函数:栈区对象会自动析构,堆区也是在delete的时候析构

    有一个特例,就是placement new的时候

        void someCode()
        {
          char memory[sizeof(Fred)];
          void* p = memory;
          Fred* f = new(p) Fred();
          // ...
          f->~Fred();   // Explicitly call the destructor for the placed object
        }

    这是唯一你需要手动调用析构函数的地方,但是上面那个代码也是有问题的,一般的对象都有一定的对齐要求的,

    一个栈区数组的地址并不见得满足得了这个对齐要求,所以也容易出问题

    placement new最合适的应用场景就是在new一个对象的时候,先分配内存,再构造对象,这样两阶段分开,方便在出问题的时候抛异常

    (如果是内存分配错误,直接抛出就可以,如果是构造对象错误,得先delete指针,再rethrow)

  • 相关阅读:
    使用jQuery对象
    jQuery插件
    使用jQuery函数
    jQuery的两把利器
    初始jQuery
    BOM——特效
    BOM的介绍
    DOM——节点操作
    miaov- 自动生成正V反V大于号V小于号V楼梯等图案
    H5 -- 本地存储计数器的值 和前端校验用户
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/5095793.html
Copyright © 2011-2022 走看看