如何传递对由std :: shared_ptr管理的指针的引用

时间:2015-11-13 04:07:55

标签: c++ c++11 shared-ptr

在此代码中,[RegularExpression("[0-9]*\\.?[0-9]+", ErrorMessage = "Must be number")] [RequiredIfEmpty("Phone", ErrorMessage = "Required")] public string MobilePhone { get; set; } 函数是第三方,我无法更改它。在getDatabase内部,我使用了main。因此,我必须通过引用将shared_ptr传递给Database*函数。我怎样才能做到这一点?

getDatabase

1 个答案:

答案 0 :(得分:1)

shared_ptr::get按值返回托管指针,因此您无法将返回值绑定到非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()};
}