我正在试图找出智能指针可以实现的目标。
但是有些东西感觉像是一种障碍。
普通指针有一个简短的定义Someclass *p
,但智能指针稍长shared_ptr<SomeClass> p
,当你不得不处理那些指针的模板(如矢量)时,我觉得它开始变得烦人。
那么智能指针有一个简短的符号吗?或者是否有允许卖空的标准方法?
我知道typedef,但它仍然觉得我到处都会有大量的typedef。
答案 0 :(得分:1)
C ++ 11让这更舒服!
我经常使用类型别名来解决这个问题。特别是这一点,使我的代码更具可读性:
template <class T>
using PtrList<T> = std::vector<std::shared_ptr<T>>;
这只是接口真正需要的,所以你应该在实现中专门使用auto
和std::make_shared
。
使用或迭代指针容器时,使用Boost.Range非常方便 - 特别是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;
}