gpt4 book ai didi

c++ - 试图返回一个用 `std::unique_ptr` 构造的 `NULL`

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:09 25 4
gpt4 key购买 nike

我正在设计一个创建不同类型 Foo 的工厂,并且我正在尝试使用智能指针。

大多数似乎都运行良好,但由于编译器的限制,我缺少一些重要的功能(即 nullptr)。

我有这个方法:

std::unique_ptr<Foo> createFoo(const std::string &fooType) {
auto it = _registeredFoo.find(fooType); // _registeredFoo is a map
if(it != _registeredFoo.end())
return std::unique_ptr<Foo>(it->second());
return std::unique_ptr<Foo>(NULL);
}

当我测试这个方法时,它从不返回类似NULL 的指针。

这就是我测试方法的方式。

std::unique_ptr<Foo> _foo = FooFactory::getInstance()->createFoo("FOO"); //FOO is registered
if(_foo) {
std::cout << "Hello, World!" << std::endl;
} else {
std::cout << "Goodbye, World!" << std::endl;
}

std::unique_ptr<Foo> _bar = FooFactory::getInstance()->createFoo("BAR"); // BAR is unregisered
if(_bar) {
std::cout << "Hello, World!" << std::endl;
} else {
std::cout << "Goodbye, World!" << std::endl;
}

我总是看到“Hello, World!”

这让我相信我对 std::unique_ptr 的构造函数的使用有点滥用。谁能给我一个关于如何在没有 emulating nullptr myself 的情况下解决这个问题的建议?

我正在使用 gcc 4.4.6。

最佳答案

我认为你想要的是一个空的unique_ptr:

return std::unique_ptr<Foo>();

看起来您正在寻找一个不指向任何对象的指针(并且在转换为 bool 时为 false)。

关于c++ - 试图返回一个用 `std::unique_ptr` 构造的 `NULL`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32204554/

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