C++ 从对象创建 shared_ptr
C++ Create shared_ptr from Object
所以在我的头文件中我有这样的声明:
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")));
但是现在,我需要return对象的引用。
因此,我需要先创建对象,将他添加到地图中,然后 return 对它的引用。
House& Obj::CreateHouse (const char *name)
{
House aaa ("apartment");
_myHouseMap.insert(std::pair<const std::string, std::shared_ptr<House>>(aaa)); <--- ERROR!
return &aaa;
}
如何在创建一个对象后,从中创建一个 shared_ptr,并插入到地图中?
提前致谢
您可以使用 new
运算符创建对象 House 指针来初始化 shared_ptr
。而且您不能 return 引用局部变量,因此 returns 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;
}
在将共享指针插入映射时,您可以先构造共享指针而不是内联指针。
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;
}
所以在我的头文件中我有这样的声明:
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")));
但是现在,我需要return对象的引用。 因此,我需要先创建对象,将他添加到地图中,然后 return 对它的引用。
House& Obj::CreateHouse (const char *name)
{
House aaa ("apartment");
_myHouseMap.insert(std::pair<const std::string, std::shared_ptr<House>>(aaa)); <--- ERROR!
return &aaa;
}
如何在创建一个对象后,从中创建一个 shared_ptr,并插入到地图中?
提前致谢
您可以使用 new
运算符创建对象 House 指针来初始化 shared_ptr
。而且您不能 return 引用局部变量,因此 returns 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;
}
在将共享指针插入映射时,您可以先构造共享指针而不是内联指针。
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;
}