繁体   English   中英

有没有更好的方法来添加两个智能指针?

[英]Is there a better way to add two smart pointers?

我重载了运算符+进一步自编写的类我通过智能指针处理这些类的实例。 现在我想知道是否有更好的方法来使用运算符。 此外,我不知道如何将它们打包回shared_ptr。

class A
{
  A operator + (A const & other)
  { //do some addition stuff and return new A}
};

std::shared_ptr<A> a, b;

//Currently I add them up like this
auto c = *a.get() + *b.get()



解除引用运算符因“智能指针”而过载。
你应该像这样添加它们:

*a + *b

如果您希望共享对象包含结果,则可以从中创建共享对象:

auto c = std::make_shared<A>(*a + *b);

如果你有原始指针,你会这样做:

auto c = new A(*a + *b);

相似性并非巧合。

另外,除非您真的打算在多个所有者之间共享对象,否则您根本不应该使用shared_ptr

有没有更好的方法来添加两个智能指针?

您无法添加智能指针。 你在这里做的是通过智能指针和添加指向的对象来间接。

对get()的调用是多余的。 您可以直接通过智能指针间接: *a + *b

此外,我不知道如何将它们打包回shared_ptr

创建共享指针的一种简单方法是std::make_shared

您可以为shared_ptr特化实现运算符:

class A
{
...
};

std::shared_ptr<A> operator+(const std::shared_ptr<A>& a1, const std::shared_ptr<A>& a2)
{
  return std::make_shared<A>(*a1 + *a2);
}

而且使用简单

std::shared_ptr<A> a1, a2;
std::shared_ptr<A> a3 = a1 + a2;

一个完整的例子可能是

class Value
{
private:
   int value;

public:
   Value(int value_): value(value_)
   {}

   Value operator+(Value other) const
   {
      return Value(value + other.value);
   }
};

std::shared_ptr<Value> operator+(const std::shared_ptr<Value>& a, const std::shared_ptr<Value>& b)
{
  return std::make_shared<Value>(*a + *b);
}

所以你可以使用

Value a, b;
Value c = a + b;

并且

std::shared_ptr<Value> pa, pb;
std::shared_ptr<Value> pc = pa + pb;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM