如何返回对智能指针向量内对象的引用
How to return a reference to an object that is inside a vector of smart pointers
我有一个指向Image
class
的智能指针的vector
,如下所示:
class Controller
{
//...
typedef std::vector<std::shared_ptr<Image>> ImageVector;
ImageVector mImageVector;
}
我有一个方法,它必须返回对Image
的引用,如下所示:
Image& Controller::getImage(const std::string name)
{
for (auto& image : mImageVector)
{
std::shared_ptr<Image> p = image;
if(p->getName() == name) //find the correct pointer to image in the vector
return p.get; // returns a reference to a image <---ERROR!! What should be here?
}
}
我如何返回对对象的引用,即它位于对这些对象的shared_ptr向量内
基本上,我的想法是制作一个方法,搜索与方法参数具有相同字符串(在对象中)的向量。如果找到,则返回对该对象的引用(不是对shared_ptr的引用,而是对对象本身的引用)。
在中
for (auto& image : mImageVector)
image
是对mImageVector
中std::shared_ptr的引用。要返回对Image
的引用,只需取消对它的引用。
Image& Controller::getImage(const std::string name)
{
for (auto& image : mImageVector)
{
if(image->getName() == name) //find the correct pointer to image in the vector
return *image; //return the Image
}
}
如果您必须处理列表中不存在的元素,则可以返回共享指针/指针而不是引用,如果该项不存在,则可以将该指针设置为null。
要获得指向对象的常规指针,请使用(p.get())
而不是p.get
。然后,要获得指向对象的引用,请取消引用指针:
return *(p.get());
正如NathanOliver帖子中所评论的那样,您的代码无法处理找不到合适图像的情况。因此,建议返回一个指针(使用p.get()
的Image*
),以便在找不到图像的情况下返回NULL
(或者也可以返回对本地static
空Image
的引用,这是一种选择)。但这实际上是另一个SO问题:返回一个";NULL";对象,如果搜索结果未找到
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化