gpt4 book ai didi

C++ 将指针的指针设置为空?

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:41 25 4
gpt4 key购买 nike

我正在研究某种智能指针技术,但我遗漏了一个部分。我尝试了几种组合,但逻辑如下:

UInt *obj = new UInt;
UInt *ref;
ref = obj;

delete obj;
obj = NULL;

if (ref == NULL)
{
// It works
}
else
{
// It failed
}

有没有办法在不将 ref 显式设置为 NULL 的情况下点击“It Works”?

编辑:

更合适的场景应该是这样的:

class A
{
public:

A(): ref(NULL) {}
~A()
{
if (ref != NULL)
delete ref;
}
int *ref;
};

int *obj = new int;
A *host = new A();

host->ref = obj; ???

delete obj;
obj = NULL;

if (host->ref == NULL)
{
// It works.
}
else
{
// It failed.
}

...

虽然不能使用 int*& ref 作为类成员....必须关闭。

最佳答案

正如您所说,您应该使用智能指针:

#include <memory>

std::shared_ptr<UInt> obj = std::make_shared<UInt>();
std::weak_ptr<UInt> ref = obj;

obj.reset();

if (ref.expired())
{
// It works
}
else
{
// It failed
}

当标准库可以为您管理内存时,请不要尝试管理自己的内存。

关于C++ 将指针的指针设置为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com