Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++_C++11_Smart Pointers_Unique Ptr - Fatal编程技术网

C++ 如何创建指向类的智能指针并初始化类构造函数

C++ 如何创建指向类的智能指针并初始化类构造函数,c++,c++11,smart-pointers,unique-ptr,C++,C++11,Smart Pointers,Unique Ptr,我有 其中p2d是通过引用传递给CDT类构造函数的对象 我想用smartpointer替换此选项: p2t::CDT* cdt = new CDT(p2d); std::unique_ptrCDT(p2d); 但它不像我写的那样工作 为其编写智能指针的正确方法是什么 创建智能指针后,我是否像普通指针一样使用指针(即(*cdt)给我它指向的对象,对吗?) 您应该使用 std::unique_ptr< p2t::CDT> cdt(p2d); 此外,智能指针重载->运算符,所以您可

我有

其中p2d是通过引用传递给CDT类构造函数的对象

我想用smartpointer替换此选项:

p2t::CDT* cdt = new CDT(p2d);
std::unique_ptrCDT(p2d);
但它不像我写的那样工作

  • 为其编写智能指针的正确方法是什么

  • 创建智能指针后,我是否像普通指针一样使用指针(即(*cdt)给我它指向的对象,对吗?)

您应该使用

std::unique_ptr< p2t::CDT> cdt(p2d);
此外,智能指针重载
->
运算符,所以您可以像使用常规指针一样调用某些类的方法

void bar(Foo * ptr)
{
    // some operations with ptr
}

std::unique_ptr<Foo> cdt(new Foo());
bar(cdt.get()); // can do so
class-Foo{
公众:
空心钢筋();
};
std::unique_ptr ptr(new Foo());
ptr->bar();//它起作用了!

+1。您还可以提到在C++14中提供的
std::make_unique
void bar(Foo * ptr)
{
    // some operations with ptr
}

std::unique_ptr<Foo> cdt(new Foo());
bar(cdt.get()); // can do so
class Foo{
public:
   void bar();
};

std::unique_ptr<Foo> ptr(new Foo());
ptr->bar(); // it works!