通过引用返回unique_ptr的向量

时间:2015-05-31 21:21:28

标签: c++

这是我的代码

class Carl{
    public:
    std::vector<std::unique_ptr<int>> asd;
    Carl(){
        asd.push_back(std::unique_ptr<int>(new int(4)));
        asd.push_back(std::unique_ptr<int>(new int(2)));
    }

    std::vector<std::unique_ptr<int>> & getVec(){
        return asd;
    }
};



int main(int argc, char** argv) {
    Carl v; 
    std::vector<std::unique_ptr<int>> * oi = &(v.getVec());

    //how to print first element?
    return 0;
}

我的目标是访问唯一的指针,而不放弃所有权。

我的问题是,如果我通过引用返回并使用向量指针捕获引用的地址,它会起作用吗?

我知道通过引用接收会更好,但我想知道它是否可以通过指针接收。

2 个答案:

答案 0 :(得分:1)

是的,此代码完全有效:

std::vector<std::unique_ptr<int>> * oi = &(v.getVec());

它也不必要地混淆。现在,如果您想访问第一个元素,则必须输入(*oi)[0]。如果您使用了引用,则只需键入oi[0]

当您想要第一个int*(*oi)[0] vs *oi[0]时,额外的输入会变得更加可恶。

答案 1 :(得分:1)

从:

开始
std::vector<std::unique_ptr<int>> * oi

1)取消引用指针:

*oi;

2)访问vector的第一个元素:

(*oi)[0];

3)访问unique_ptr指向的文件:

*((*oi)[0]);

上述应该有效,但我认为这不是一个好的解决方案。当这种解决方案显得必要时,设计几乎总会出现问题。