zoukankan      html  css  js  c++  java
  • 巧用c++11 的forward实现可变参数构造,生成智能指针

    C++11 提供强大的智能指针shared_ptr来管理内存,避免使用裸指针带来的各种不确定访问造成的程序崩溃。

    为了强制使用智能指针,一个简单的办法是,将类的构造函数析构函数声明为protected,防止new实例。

    但是这个办法有一个缺陷,子类继承之后,无法拦截new的访问。

    缺陷先不管,一个团队里面编码,这些规则应该写进规范

    基于这个原理,可以构造自己的智能指针实例生成模板函数

    如下所示:

     1 namespace JOJODRU {
     2     template<typename T, typename... ARG>
     3     std::shared_ptr<T> CreateInstance(ARG&&... args)
     4     {
     5         struct TEnableShared : public T
     6         {
     7             TEnableShared(ARG&&... args)
     8                 : T(std::forward<ARG>(args)...)
     9             {}
    10         };
    11 
    12         return std::make_shared<TEnableShared>(std::forward<ARG>(args)...);
    13     }
    14 }

    我们使用std的forward帮我们转发可变参数列表给相应的构造函数来实例化模板

    同时,工作中,可以约定T的构造函数和析构函数都应该声明为protected。

  • 相关阅读:
    vue中富文本编辑框
    vue中生成二维码
    在ABP中使用linq
    js根据年月得到当前这个月总共有多少天
    mescroll在vue中的应用
    javascript积累
    javascript常用的操作
    情侣间常犯的7个沟通问题
    欧洲旅游六大最佳目的地
    见与不见
  • 原文地址:https://www.cnblogs.com/jojodru/p/6669412.html
Copyright © 2011-2022 走看看