我正在尝试使用函数 NuiCreateSensorByIndex(int,INuiSensor**) .我尽量不使用裸指针,所以我做了 std::unique_ptr<INuiSensor> nui;
使其成为 unique_ptr。
现在我想访问这个函数,所以我执行以下操作:hr = NuiCreateSensorByIndex(i, &nui.get());
,但这是错误的:
KinectManager.cpp:29: error: C2102: '&' requires l-value
我做错了什么以及如何解决?
最佳答案
编译器是对的:虽然std::unique_ptr<INuiSensor>
可用于指向事物,它不是 NuiCreateSensorByIndex(int,INuiSensor**)
期望的对象指针功能。该函数需要一个指向指针的指针的原因是它想通过这种赋值来修改指针的内容:
*ptrToPtr = somePtr;
如果编译器让你传递一个指向std::unique_ptr<INuiSensor>
的指针,此分配将无效。这就是为什么您需要创建一个临时的“裸”指针,将其传递给函数,然后将结果分配回 std::unique_ptr<INuiSensor>
的原因。 .
关于c++ - '&' 需要 &std::unique_ptr<>.get 上的左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262818/