zoukankan      html  css  js  c++  java
  • shared_ptr注意点

    1.原始指针不能直接使用赋值运算符对shared_ptr进行赋值运算

    std::shared_ptr<int> p;
    p= new int(1); //error
    p.reset(new int(1); //success

    2.shared_ptr默认情况下不支持对数组内存的管理

    std::shared_ptr<int> p(new int[10],[](int *P){delete[] p;});
    std::shared_ptr<int> p(new int[10],std::default_delete<int[]>);
    std::unique_ptr<int[]> arr(new int[10]);
    std::shared_ptr<int> p(std::move(arr));

    in c++11,it is valid to construct a shared_ptr<T> from a std::unique_ptr<T[]>,since the shared_ptr obtains its deleter(a std::default_delete<T[]> object) from

    the unique_ptr,the array will be correctly deallocated.

    3.同一个原始指针不能初始化多个std::shared_ptr

    int *integer_p= new int(1);
    std::shared_ptr<int> p1(integer_p); //success
    std::shared_ptr<int> p2(integer_p); //error

    4.避免在传参时构建智能指针

    可能智能指针还在构建时,就抛出异常。

    std::unique_ptr 若不使用默认删除器,则需要指定删除器类型

    std::unique_ptr<int,void(*)(int *)> p(new int (1),[](int *P){delete p;});
  • 相关阅读:
    Vue-CLI项目-axios模块前后端交互(类似ajax提交)
    Vue-CLI项目中路由传参
    HTML标签嵌套规则
    POJ1050 To the Max
    POJ2488 A Knight's Journey
    POJ1083 Moving Tables
    洛谷P1265 公路修建
    POJ2236 Wireless Network
    洛谷P1991 无线通讯网
    POJ1018 Communication System
  • 原文地址:https://www.cnblogs.com/Call-C/p/6979070.html
Copyright © 2011-2022 走看看