C++ 下面的代码是否会导致悬空引用?

C++ 下面的代码是否会导致悬空引用?,c++,C++,这里的ref是调用getRef()后的悬空引用吗 否。它引用了您使用new创建的尚未销毁的对象 我不清楚哪个对象是别名的引用?在不知道物体是什么的情况下,我无法判断物体是否被摧毁 它没有被破坏,所以你的程序泄露了。要销毁该对象,您可以以以下方式结束程序: int& getRef(std::shared_ptr<int> sharedPtr) { return *sharedPtr; } int main() { auto sharedIntPtr = std:

这里的ref是调用getRef()后的悬空引用吗

否。它引用了您使用
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;