首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++是否将指针的指针设置为null?

C++是否将指针的指针设置为null?
EN

Stack Overflow用户
提问于 2013-02-02 00:36:20
回答 3查看 151关注 0票数 1

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

代码语言:javascript
运行
复制
UInt *obj = new UInt;
UInt *ref;
ref = obj;

delete obj;
obj = NULL;

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

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

编辑:

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

代码语言:javascript
运行
复制
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作为类成员....一定很接近了。

EN

回答 3

Stack Overflow用户

发布于 2013-02-02 00:47:09

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

代码语言:javascript
运行
复制
#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
}

不要试图管理您自己的内存,因为标准库已经为您准备好了。

票数 4
EN

Stack Overflow用户

发布于 2013-02-02 00:39:53

将ref声明为对指针的引用

代码语言:javascript
运行
复制
Uint*& ref = obj;

ref现在将引用obj指针。

票数 3
EN

Stack Overflow用户

发布于 2013-02-02 00:41:50

最初,objref都指向(相同) UInt实例。然后删除该实例并将obj设置为NULL。但是ref就像任何其他常规指针一样,所以它仍然指向被删除的实例。

相反,您可以通过在声明中添加&来创建引用变量,或者在本例中创建“引用指针”:

代码语言:javascript
运行
复制
Uint*& ref = obj;

那么ref实际上引用了obj,并保持与obj相同的值(指针)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14650883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档