所以在我的头文件中我有这个声明:
typedef std::map<const std::string, std::shared_ptr<House> > myHouseMap;
myHouseMap _myHouseMap;
在我的源文件中,我可以在地图中插入一个对象:
_myHouseMap.insert(std::pair<const std::string, std::shared_ptr<House>>("apartment", std::make_shared<House>("apartment")));
但是现在,我需要返回对象的引用。 因此,我需要先创建对象,将他添加到地图中,然后返回对它的引用。
House& Obj::CreateHouse (const char *name)
{
House aaa ("apartment");
_myHouseMap.insert(std::pair<const std::string, std::shared_ptr<House>>(aaa)); <--- ERROR!
return &aaa;
}
创建Object后,如何从中创建shared_ptr并插入地图?
提前致谢
答案 0 :(得分:2)
您可以简单地构建共享指针,而不是在将其插入地图时内联。
House& Obj::CreateHouse(const char *name)
{
// make the ptr first!
auto aaa = std::make_shared<House>("apartment");
_myHouseMap.insert(std::make_pair("apartment", aaa));
return *aaa;
}
答案 1 :(得分:1)
您可以使用new
运算符创建对象House指针以初始化shared_ptr
。并且您无法返回局部变量的引用,因此返回House对象指针。在这种情况下,您必须通过自定义删除工具来处理shared_ptr
的清理过程。
House* Obj::CreateHouse (const char *name)
{
House* aaa = new Hash("apartment");
_myHouseMap.insert(std::pair<const std::string, std::shared_ptr<House>>(aaa,[=](House * aaa) {delete aaa;}));
return aaa;
}