智能指针注意点一:使用智能指针跟使用普通指针一样。没有进行初始话的指针不能用。
错误:
void print_element(shared_ptr<vector<int>> v) // 打印vector内容
{
for (auto s : *v)
cout << s << endl;
}
void cin_element(shared_ptr<vector<int>> v) // 写入数据
{
int i;
while (cin >> i)
{
v->push_back(i);
}
print_element(v);
}
int main()
{
shared_ptr<vector<int>> p;
cin_element(p);
}
产生的错误使用为这个指针没有进行初始化就操作指针导致的错误。
报错信息:
引发了异常: 读取访问权限冲突。
std::_Vector_alloc<std::_Vec_base_types<int,std::allocator > >::_Myend(…) 返回 0xC。
我们可以使用make_shared,对智能指针进行初始化。
void print_element(shared_ptr<vector<int>> v)
{
for (auto s : *v)
cout << s << endl;
}
void cin_element(shared_ptr<vector<int>> v)
{
int i;
while (cin >> i)
{
v->push_back(i);
}
print_element(v);
}
int main()
{
shared_ptr<vector<int>> p = make_shared<vector<int>>(); // 修改位置
cin_element(p);
}
智能指针注意点二: 智能指针是一个模板类,所以不能将一个普通的指针直接使用 = 初始化,但是可以使用make_shared进行初始化。