C++ 下面的代码是否会导致悬空引用?
这里的ref是调用getRef()后的悬空引用吗 否。它引用了您使用C++ 下面的代码是否会导致悬空引用?,c++,C++,这里的ref是调用getRef()后的悬空引用吗 否。它引用了您使用new创建的尚未销毁的对象 我不清楚哪个对象是别名的引用?在不知道物体是什么的情况下,我无法判断物体是否被摧毁 它没有被破坏,所以你的程序泄露了。要销毁该对象,您可以以以下方式结束程序: int& getRef(std::shared_ptr<int> sharedPtr) { return *sharedPtr; } int main() { auto sharedIntPtr = std:
new
创建的尚未销毁的对象
我不清楚哪个对象是别名的引用?在不知道物体是什么的情况下,我无法判断物体是否被摧毁
它没有被破坏,所以你的程序泄露了。要销毁该对象,您可以以以下方式结束程序:
int& getRef(std::shared_ptr<int> sharedPtr) {
return *sharedPtr;
}
int main()
{
auto sharedIntPtr = std::make_shared<int>(42);
int& ref = getRef(sharedIntPtr);
std::cout << ref;
}
在您的第二个示例中,您引用的是由两个
共享\u ptr
管理的int
,并且不会有泄漏,因为上次超出范围的共享\u ptr
销毁了int引用不完全是别名,它是一个不同的变量,指向在其整个生命周期中初始化它时使用的同一地址
如果您想知道某个对象在某些情况下是否正在被销毁,可以利用析构函数
#包括
类myClass
{
私人:
int x;
公众:
myClass(int_x):x(x){}
int getX()常量{return x;}
~myClass(){std::你能用new
分配吗,你永远不会用delete
销毁,所以int
由ptr
指向,然后由ref
引用的int
不是挂起的。这是内存泄漏,但不是挂起的引用。在第二种情况下,直到sharedintptpr
超出范围并且也没有挂起,才会调用析构函数。谢谢!在这种情况下,此引用引用指的是什么“对象”?是它指的是ptr指向的“未命名”整数?@不客气。在您的最上面的示例中,ref
引用的是ptr
指向的对象。由ptr
本身分配的内存在getRef
末尾释放,但不是它指向的对象,即ref
对象参考。
int& getRef(std::shared_ptr<int> sharedPtr) {
return *sharedPtr;
}
int main()
{
auto sharedIntPtr = std::make_shared<int>(42);
int& ref = getRef(sharedIntPtr);
std::cout << ref;
}
delete &ref;