【发布时间】:2011-04-16 04:56:25
【问题描述】:
如果我的类 SomeType 有一个从地图返回元素的方法(使用键)说
std::unique_ptr<OtherType> get_othertype(std::string name)
{
return otMap.find(name);
}
这将确保调用者会收到指向地图中的指针而不是副本的指针?这样做可以吗,还是会尝试调用复制构造函数(并且由于它已被删除而失败),因为它正在被返回?
假设我必须使用 unique_ptr 作为我的地图项。
更新::
在尝试实现代码后,似乎 unique_ptr 和 std:map/:pair 在 gcc 4.4.4 中不能一起工作,pair 只是不喜欢将 unique_ptr 作为类型参数。 (见Can't create map of MoveConstructibles)。
我将 ptr 更改为 std::shared_ptr 并且一切正常。
我想我可以对共享指针使用相同的代码吗?
【问题讨论】:
-
顺便问一下,
OtherType到底是什么?它是具有虚拟成员函数的基类吗?你需要亚型多态吗? -
它将是一个像接口一样具有纯虚方法的基类。我只需要调用不需要强制转换的纯虚拟方法之一。这会改变事情吗?
-
接口是
unique_ptr用法的主要示例。没有其他问题。 -
感谢 Fred,最好花时间了解和使用最好的工具来完成这项工作,根据无效的假设盲目地在沙屋上建造。
标签: c++ c++11 smart-pointers unique-ptr