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]);