如何在不使代码庞大的情况下处理共享/弱ptr ?

How can we deal with shared/weak ptr without making the code huge?

本文关键字:共享 处理 情况下 ptr 代码      更新时间:2023-10-16

我想弄清楚智能指针可以实现什么。
但是有些东西感觉像是一种障碍。

一个普通的指针有一个短的定义Someclass *p,但智能指针有点长shared_ptr<SomeClass> p,我觉得当你不得不处理这些指针的模板(如向量)时,它开始变得令人厌倦。

那么智能指针有一个简短的符号吗?或者有一个标准的方式允许速记?

我知道typepedef,但它仍然感觉我只是结束了大量的typepedef无处不在

c++ 11使这更加舒适!

我经常使用类型别名来解决这个问题。特别是这个,使我的代码更容易读:
template <class T>
using PtrList<T> = std::vector<std::shared_ptr<T>>;

这只是接口真正需要的,所以你可能应该在实现中专门使用autostd::make_shared

当使用或遍历指针容器时,使用Boost也非常方便。范围-特别是boost::adaptors::indirected .

下面是一个使用大量智能指针但避免使用长类型的小示例:

PtrList<Bar> foo_to_bar(PtrList<Foo> const& fooList)
{
  PtrList<Bar> resultList;
  resultList.reserve(fooList.size());
  for (auto&& foo : fooList | boost::adaptors::indirected)
  {
    auto bar = std::make_shared<Bar>(foo);
    bar->enableAwesomeness();
    resultList.push_back(bar);
  }
  return resultList;
}