通过引用返回一个unique_ptr类型的vector

Returning a vector of unique_ptr by reference

本文关键字:unique ptr 类型 vector 一个 引用 返回      更新时间:2023-10-16

这是我的代码

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;
}

我的目标是在不放弃所有权的情况下访问唯一指针。

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

我知道通过引用接收会更好,但我正试图找出是否有可能通过指针接收。

开头:

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

1)对指针解引用:

*oi;
2)访问vector的第一个元素:
(*oi)[0];

3) unique_ptr指向的int访问:

*((*oi)[0]);

以上应该是可行的,但我不认为这是一个好的解决方案。当这样的解决方案似乎是必要的时候,几乎总是设计出了问题。

是的,这段代码是完全有效的:

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

这也是不必要的混淆。现在如果你想访问第一个元素,你必须输入(*oi)[0]。而如果使用引用,则可以直接输入oi[0]

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