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。

  • 相关阅读:
    SRM 441(1-250pt, 1-500pt)
    SRM 387(1-250pt)
    SRM 388(1-250pt)
    SRM 389(1-250pt)
    SRM 601(1-250pt,500pt)
    SRM 409(1-250pt, 1-500pt)
    SRM 408(1-250pt, 1-500pt)
    unique() 去重函数
    poj3468(A Simple Problem with Integers)
    HDU1394(Minimum Inversion Number)
  • 原文地址:https://www.cnblogs.com/jojodru/p/6669412.html
Copyright © 2011-2022 走看看