首页 > 解决方案 > 我的类“Smart_pointer”和可变参数模板的问题

问题描述

我需要你的帮助。我创建了一个“智能指针”类和一个使用可变参数模板来模拟新运算符(保留内存空间)的函数。

    template <typename T>
    class smart_ptr{
    T* pointer = nullptr;
  public:
    explicit smart_ptr<T>(T* p = nullptr){
      pointer = p;
    }

    smart_ptr(T value){pointer = new T(value);}

    ~smart_ptr(){
      delete (pointer);
    }

    T& operator*(){return *pointer;}

    T* operator->(){return pointer;}
};

   template<typename T, typename ...Params>
   smart_ptr<T> make_smart_ptr(Params&& ...params) {
   return smart_ptr<T>(params...);
  }

但是,当我用以下情况测试它时

smart_ptr<int> sp1; 
    sp1 = make_smart_ptr<int>(10);
    cout << *sp1 << endl;  //10

    smart_ptr<string> sp2 = make_smart_ptr<string>("Hello"); 
    cout << *sp2 << endl; //"Hello"

它只给了我正确的输出,即“Hello”,而在另一个输出中它给了我 0 而不是 10(在我编译和执行代码的结果下方)。

0      //result of cout to sp1 (incorrect)
Hello  //result of cout to sp2 (correct)

您可以为我解决我的代码并在所有情况下运行的任何帮助。谢谢和美好的一周。

标签: c++templatesvariadic-templatessmart-pointersnullptr

解决方案


推荐阅读