如何传递对 std::shared_ptr 管理的指针的引用
How to pass reference to pointer managed by std::shared_ptr
在此代码中 getDatabase
函数是第 3 方,我无法更改它。在 main
函数中我使用了 shared_ptr
。所以有一个要求我必须通过引用将 Database*
传递给 getDatabase
函数。我怎样才能做到这一点?
#include <iostream>
#include <memory>
class Database
{
};
void getDatabase(Database*& pDb)
{
pDb = createNewDatabase();
}
int main()
{
std::shared_ptr<Database> pDb=NULL;
getDatabase(pDb.get()); // Here is the issue pDb.get() doesn't do what I need
return 0;
}
shared_ptr::get
return 是按值管理的指针,因此您不能将 return 值绑定到非 const
引用。
解决这个问题的方法是首先使用原始指针创建数据库,然后将所有权转移给 shared_ptr
。您可以选择将该代码包装在您自己的 getDatabase()
重载中,以保持您的调用站点干净。
void getDatabase(Database*& pDb)
{
pDb = createNewDatabase();
}
std::shared_ptr<Database> getDatabase()
{
Database *db = nullptr;
getDatabase(db);
return std::shared_ptr<Database>{db};
}
int main()
{
std::shared_ptr<Database> pDb{getDatabase()};
}
在此代码中 getDatabase
函数是第 3 方,我无法更改它。在 main
函数中我使用了 shared_ptr
。所以有一个要求我必须通过引用将 Database*
传递给 getDatabase
函数。我怎样才能做到这一点?
#include <iostream>
#include <memory>
class Database
{
};
void getDatabase(Database*& pDb)
{
pDb = createNewDatabase();
}
int main()
{
std::shared_ptr<Database> pDb=NULL;
getDatabase(pDb.get()); // Here is the issue pDb.get() doesn't do what I need
return 0;
}
shared_ptr::get
return 是按值管理的指针,因此您不能将 return 值绑定到非 const
引用。
解决这个问题的方法是首先使用原始指针创建数据库,然后将所有权转移给 shared_ptr
。您可以选择将该代码包装在您自己的 getDatabase()
重载中,以保持您的调用站点干净。
void getDatabase(Database*& pDb)
{
pDb = createNewDatabase();
}
std::shared_ptr<Database> getDatabase()
{
Database *db = nullptr;
getDatabase(db);
return std::shared_ptr<Database>{db};
}
int main()
{
std::shared_ptr<Database> pDb{getDatabase()};
}