gpt4 book ai didi

c++ - 取消引用时不一致返回空 shared_ptr

转载 作者:太空狗 更新时间:2023-10-29 21:04:02 26 4
gpt4 key购买 nike

我最近注意到在使用返回的空 shared_ptr 时有一些奇怪的行为。为了说明这个问题,考虑这个例子:

    struct A {
A() { }
void foo() {
std::cout << "A::foo" << std::endl;
}
};

struct B {
B() :i(42) { }
void foo() {
std::cout << "B:foo with i: " << i << std::endl;
}

int i;
};

template<typename T>
std::shared_ptr<T> create_empty() {
return std::shared_ptr<T>();
}

然后调用:

    std::shared_ptr<A> pa(create_empty<A>());
pa->foo(); // #1: Works fine and prints: "A::foo".

std::shared_ptr<B> pb(create_empty<B>());
pb->foo(); // #2: Throws an exception.

现在我的问题是为什么调用 #1 有效(我预计也会出现异常),如果这是正确的行为,如何防止 #1 有效。我应该检查返回值是否为空?还有其他一些方法可以返回 null 或空的 shared_ptr 吗?如果重要的话,我正在使用 MSVC++ 11...

最佳答案

两种情况下的代码都取消引用空指针。行为是未定义的,所以任何事情都可能发生,包括看起来有意义的事情。不要试图理解它们。未定义是未定义的。

关于c++ - 取消引用时不一致返回空 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388627/

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