这是我的代码
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;
}
我的目标是访问唯一的指针,而不放弃所有权。
我的问题是,如果我通过引用返回并使用向量指针捕获引用的地址,它会起作用吗?
我知道通过引用接收会更好,但我想知道它是否可以通过指针接收。
答案 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]);
上述应该有效,但我认为这不是一个好的解决方案。当这种解决方案显得必要时,设计几乎总会出现问题。