代码之家  ›  专栏  ›  技术社区  ›  OneHiveRule

这会导致空指针解引用吗

c++
  •  -5
  • OneHiveRule  · 技术社区  · 8 月前

    在下面的代码中,SomeClass的作用域在块内,但它的引用存储在 p.然后使用p调用SomeClass的SomeMethod。

    SomeClass TestMethod(Someclass c) {
        SomeClass * p;
        {
            SomeClass t = new SomeClassBuilder(c).Build();
            p = &t;
        }
        p->SomeMethod();
        return *p;
    }
    

    p->SomeMethod() 将使用空指针表示错误。

    我尝试在SomeClass中使用int inplace,但没有得到空指针的尊重。但是想了解根据c++标准什么是行为。

    1 回复  |  直到 8 月前
        1
  •  3
  •   JohnFilleau    8 月前

    不,这不会导致空指针解引用。 p 在块内分配了一些非空值。仅仅因为它指向的think已经结束了它的生命周期,并不意味着存储在中的值(指针值) p 将成为 nullptr 神奇的。

    然而 ,这仍然是未定义的行为,如果 SomeMethod 是一种非静态方法,因为(假设 SomeClass 是类类型(强烈暗示))的生存期 t 在块的末尾结束。