我搜索以查看是否找到解决此问题的方法,但找不到答案。我遇到的问题是在我的代码编译时,我没有得到智能感知
如果我收到一个参数(或声明一个变量),例如模板 T :
unique_ptr<vector<unique_ptr<T>>> & dataSets;
智能感知找到 dataSets.get() 但没有找到 dataSets.get()->clear(); 但是,如果我这样做,它编译得很好。但是,如果它不是模板,它似乎可以正常工作。
代码:
template <typename T>
void mtsql::MTMySQL<T>::executePrepareStatement(const string & sqlText,const unique_ptr<vector<SQLDataType>> & argList,unique_ptr<vector<unique_ptr<T>>> & dataSets)
{
dataSets.get()->clear();
unique_ptr<sql::ResultSet> rs;
for (auto iter = argList->cbegin(); iter != argList->cend() ; ++iter)
{
auto ps = this->createPreparedStatment(sqlText,args);
rs.reset(ps->execute());
dataSets.get()->insert(std::move(rs));
ps.release();
}
}
我是 c++11 的新手,所以我可能会做额外的步骤或可能错误的步骤(例如,我认为 ps.release() 不需要......我的意思是删除它,但因为是智能点)
谢谢您的帮助!
编辑 1:多亏了帮助,我的代码看起来好多了,而且没有可能的泄漏。谢谢!
dataSets->clear();
for (auto iter = argList->cbegin(); iter != argList->cend() ; ++iter)
{
auto ps = this->createPreparedStatment(sqlText,args);
dataSets->push_back(std::move(rs));
}