[英]Trying to return a `std::unique_ptr` constructed with `NULL`
我正在设计一个工厂,它创建不同类型的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;
}
我总是看到“你好,世界!”
这让我相信我使用std::unique_ptr
的构造函数有点滥用。 任何人都可以给我一个如何处理这个问题的建议,而不是自己模仿nullptr
吗?
我正在使用gcc 4.4.6。
我认为你想要的是一个空的unique_ptr
:
return std::unique_ptr<Foo>();
看来你正在寻找一个指向没有对象的指针(当转换为bool
时它是false
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.