[英]Dereferencing a temporary pointer to initialize a reference member variable
我正在使用一个可以容纳大型数据结构的外部库。 调用它返回指向它管理的对象的指针:
class ExternalLib {
public:
int* GetLargeObject() { return &large_object; };
private:
int large_object = 1;
};
我正在尝试为这个外部库编写一个包装器,它可以保存对我感兴趣的大型数据结构的 const 引用:
class ExternalLibraryWrapper {
public:
ExternalLibraryWrapper() : large_object_ref(*ext.GetLargeObject()){};
private:
ExternalLib ext;
const uint &large_object_ref;
};
但是,我收到编译器警告:
引用成员“large_object_ref”绑定到临时 object,其生命周期将短于构造的 object [clang: dangling_member] 的生命周期
据我了解, ext.GetLargeObject()
返回一个指向(*this).ext.large_object
地址的临时指针。 编译器不应该知道构造的 object &large_object_ref
实际上并没有绑定到临时 object 吗?
当初始化器是纯右值或初始化器的类型与引用的类型相差超过cv -qualifiers 但可以转换为它(当然,除非转换是用户定义的并且产生参考)。 (这种情况在对非 const 的左值引用的情况下被拒绝;由于历史原因,接受const U&
情况。从一开始就使用const T&&
并表示“你可以通过临时变量,并且我不会修改你传递的任何东西”,但这不是我们所在的地方。)
显然,取消引用指针会产生一个左值,因此此警告(非常有用,因为无法使用如此初始化的引用。)表明类型不匹配与您的情况有关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.