如何避免共享指针的复制赋值运算符c ++
How to avoid copy assignment operator c++ for a shared pointer
考虑下面的行来创建对象 foo
of class creature
:
foo = creature(choice);
这会在将其分配给 foo
之前创建一个临时 creature
对象。这也意味着将调用析构函数。如果我不希望这种情况发生,并且我不想实现复制赋值运算符,那么我将使用以下方法创建它:
creature foo(choice);
如何对下面的行进行同样的操作?同样,生物的析构函数将被调用,我想避免这种情况。
std::shared_ptr<creature> creature_sp = std::make_shared<creature>(creature(choice));
对象创建部分应该是:
std::make_shared<creature>(choice);
make_shared
使用完美转发将参数转发给模板类型的构造函数——这就是 make_shared
存在的全部原因。
您还可以通过使用 auto
:
来避免打字错误 (DRY principle) 的可能性
auto creature_sp = std::make_shared<creature>(choice);
考虑下面的行来创建对象 foo
of class creature
:
foo = creature(choice);
这会在将其分配给 foo
之前创建一个临时 creature
对象。这也意味着将调用析构函数。如果我不希望这种情况发生,并且我不想实现复制赋值运算符,那么我将使用以下方法创建它:
creature foo(choice);
如何对下面的行进行同样的操作?同样,生物的析构函数将被调用,我想避免这种情况。
std::shared_ptr<creature> creature_sp = std::make_shared<creature>(creature(choice));
对象创建部分应该是:
std::make_shared<creature>(choice);
make_shared
使用完美转发将参数转发给模板类型的构造函数——这就是 make_shared
存在的全部原因。
您还可以通过使用 auto
:
auto creature_sp = std::make_shared<creature>(choice);