我终于开始将我的代码库迁移到 C++11,这会产生更短更好的代码。
然而,我发现当我使用新指针调用函数时,它比以前长了很多:
void addCallback(Callback*); // Takes ownership of callback.
// ...
addCallback(new Callback); // Clear.
变成
void addCallback(std::unique_ptr<Callback>); // No comment needed now!
// ...
addCallback(std::move(std::unique_ptr<Callback>(new Callback))); // bleh.
提议的make_unique()
模板功能只会在一定程度上改善这一点。
经过一些实验,我为此编写了一个辅助模板函数:
template <typename T>
auto move_ptr(T *t) -> decltype(std::move(std::unique_ptr<T>(t))) {
return std::move(std::unique_ptr<T>(t));
}
// ..
addCallback(move_ptr(new Callback)); // Not bad!
它似乎工作正常 - 但我肯定是在重新发明轮子吗?(如果我不是 - 我的move_ptr
或我最终称之为的任何陷阱或可能的错误?)