Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过引用返回唯一_ptr的向量_C++ - Fatal编程技术网

C++ 通过引用返回唯一_ptr的向量

C++ 通过引用返回唯一_ptr的向量,c++,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<

这是我的密码

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::矢量asd;
卡尔(){
asd.push_-back(标准::unique_-ptr(新的int(4)));
asd.push_-back(标准::unique_-ptr(新整数(2)));
}
std::vector和getVec(){
返回asd;
}
};
int main(int argc,字符**argv){
卡尔五世;
std::vector*oi=&(v.getVec());
//如何打印第一个元素?
返回0;
}
我的目标是访问不放弃所有权的唯一指针

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


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

是的,此代码完全有效:

std::vector<std::unique_ptr<int>> * oi = &(v.getVec());
std::vector*oi=&(v.getVec());
这也是不必要的混乱。现在,如果要访问第一个元素,必须键入
(*oi)[0]
。而如果您使用了引用,则只需键入
oi[0]

当您想要第一个
int
*(*oi)[0]
而不是
*oi[0]
时,额外的键入会变得更加讨厌,从以下开始:

std::vector<std::unique_ptr<int>> * oi
2) 访问向量的第一个元素:

(*oi)[0];
3) 访问
唯一\u ptr
指向的int:

*((*oi)[0]);

上述方法应该有效,但我认为这不是一个好的解决办法。当需要这样的解决方案时,设计几乎总是有问题。

ooo我明白了。我试图通过
std::coutIf访问它,如果您与未知代码共享唯一的指针,那么您只是在请求悬挂的引用/指针。然后,当您使它们无效并实际上放弃了唯一所有权时,您必须小心。也许使用共享指针会更干净,这取决于您试图实现的目标。
*((*oi)[0]);