c++ - When to replace a global std::unique_ptr with a singleton -
a colleague has insisted on using meyer's singleton global pointer variables "there's no guarantee construction of global unique_ptr won't throw". instead of:
#include <memory> std::unique_ptr<foo> ptr(nullptr); // apparently isn't safe. int main(/*blah*/) { ptr.reset(new foo()); } we have
unique_ptr<foo> singleton { try { static unique_ptr<foo> ptr(); return ptr; } catch (...) { std::cerr << "failed create single instance\n"; exit(1); } return unique_ptr<type>(); } int main() { } to me seems solution looking problem. have point?
your colleague incorrect (or perhaps out of date, pre-standard versions of unique_ptr might different). nullptr_t constructor of unique_ptr guaranteed not throw (20.7.1.2):
constexpr unique_ptr (nullptr_t) noexcept : unique_ptr() {} since it's constexpr (and since nullptr constant expression), required initialized during constant initialization (3.6.2/2). controlling initialization order (the other reason meyers singleton might useful) doesn't apply here.
Comments
Post a Comment