Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “我的班级有问题”;智能指针;和可变模板_C++_Templates_Variadic Templates_Smart Pointers_Nullptr - Fatal编程技术网

C++ “我的班级有问题”;智能指针;和可变模板

C++ “我的班级有问题”;智能指针;和可变模板,c++,templates,variadic-templates,smart-pointers,nullptr,C++,Templates,Variadic Templates,Smart Pointers,Nullptr,我需要你的帮助。我创建了一个类“智能指针”和一个函数,该函数使用可变模板来模拟新操作符(保留内存空间) 任何你能给我的帮助,以解决我的代码,它在所有情况下运行。谢谢,祝你好运。你的课违反了规定。sp1的赋值不会转移指针的所有权,因此分配的int在您可以读取之前会被提前释放。您需要在类中实现适当的移动语义。那么,除了移动构造函数及其重载之外,我还应该实现复制构造函数及其重载吗?复制构造函数和复制赋值运算符,以及移动构造函数和移动赋值运算符,是的。另外,make_-smart_-ptr在将Param

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


任何你能给我的帮助,以解决我的代码,它在所有情况下运行。谢谢,祝你好运。

你的课违反了规定。
sp1
的赋值不会转移指针的所有权,因此分配的
int
在您可以读取之前会被提前释放。您需要在类中实现适当的移动语义。那么,除了移动构造函数及其重载之外,我还应该实现复制构造函数及其重载吗?复制构造函数和复制赋值运算符,以及移动构造函数和移动赋值运算符,是的。另外,
make_-smart_-ptr
在将
Params
传递到
smart_-ptr
的构造函数时应该使用
std::forward
。谢谢你,雷米,我已经可以解决这个问题了。感谢您的支持和信息:D。
    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"
0      //result of cout to sp1 (incorrect)
Hello  //result of cout to sp2 (correct)