相关疑难解决方法(0)

如何将unique_ptr参数传递给构造函数或函数?

我是新手在C++ 11中移动语义,我不太清楚如何处理unique_ptr构造函数或函数中的参数.考虑这个引用自身的类:

#include <memory>

class Base
{
  public:

    typedef unique_ptr<Base> UPtr;

    Base(){}
    Base(Base::UPtr n):next(std::move(n)){}

    virtual ~Base(){}

    void setNext(Base::UPtr n)
    {
      next = std::move(n);
    }

  protected :

    Base::UPtr next;

};
Run Code Online (Sandbox Code Playgroud)

这是我应该如何编写unique_ptr参数的函数?

我需要std::move在调用代码中使用吗?

Base::UPtr b1;
Base::UPtr b2(new Base());

b1->setNext(b2); //should I write b1->setNext(std::move(b2)); instead?
Run Code Online (Sandbox Code Playgroud)

c++ arguments unique-ptr c++11

377
推荐指数
5
解决办法
15万
查看次数

std :: vector :: emplace_back和std :: move

使用std::vector::emplace_backstd::move一起有什么好处?或者它只是多余的,因为std::vector::emplace_back会做一个inplace-construction?

案例澄清:

std::vector<std::string> bar;
Run Code Online (Sandbox Code Playgroud)

第一:

bar.emplace_back(std::move(std::string("some_string")));
Run Code Online (Sandbox Code Playgroud)

第二:

std::string str("some_string");
bar.emplace_back(std::move(str));
Run Code Online (Sandbox Code Playgroud)

第三:

bar.emplace_back(std::move("some_string"));
Run Code Online (Sandbox Code Playgroud)

c++ vector move-semantics c++11

20
推荐指数
3
解决办法
9667
查看次数

使用std :: make_unique的push_back或emplace_back

基于在回答这些 问题 在这里,我知道这肯定是最好使用C++ 14的std::make_unique,而不是emplace_back(new X)直接.

那就是说,打电话是首选

my_vector.push_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)

要么

my_vector.emplace_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)

也就是说,我应该使用push_backemplace_back何时添加std::unique_ptr构造的std::make_unique

====编辑====

为什么?c:< - (微笑)

c++ stdvector unique-ptr c++11 c++14

17
推荐指数
1
解决办法
6435
查看次数

标签 统计

c++ ×3

c++11 ×3

unique-ptr ×2

arguments ×1

c++14 ×1

move-semantics ×1

stdvector ×1

vector ×1