练习12.6
编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。
解答:
练习12.7
重做上一题,这次使用shared_ptr而不是内置指针。
练习12.8
下面的函数是否有错误?如果有,解释错误原因。
bool b(){
int *p = new int;
// ...
return p;
}
解答:
练习12.9
解释下面代码执行的结果:
int *q = new int(42), *r = new int(10);
r = q;
auto q2 = make_shared<int>(42), r2 = make_shared<int>(100);
r2 = q2;
编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。
解答:
#include <iostream>
#include <vector>
using namespace std;
vector<int>* initFunc(){
vector<int> *pv = new vector<int>;
return pv;
}
void readFunc(vector<int> *pv){
int num;
while (cin >> num){
pv->push_back(num);
}
for (auto i : *pv){
cout << i << " ";
}
cout << endl;
delete pv;
}
int main(){
readFunc(initFunc());
}
练习12.7
重做上一题,这次使用shared_ptr而不是内置指针。
解答:
#include <iostream>
#include <vector>
using namespace std;
shared_ptr<vector<int>> initFunc(){
shared_ptr<vector<int>> pv = make_shared<vector<int>>();
return pv;
}
void readFunc(shared_ptr<vector<int>> &pv){
int num;
while (cin >> num){
pv->push_back(num);
}
for (auto i : *pv){
cout << i << " ";
}
cout << endl;
}
int main(){
readFunc(initFunc());
}
练习12.8
下面的函数是否有错误?如果有,解释错误原因。
bool b(){
int *p = new int;
// ...
return p;
}
解答:
p分配出去的内存没有被回收。
可能会造成内存泄露等错误。
练习12.9
解释下面代码执行的结果:
int *q = new int(42), *r = new int(10);
r = q;
auto q2 = make_shared<int>(42), r2 = make_shared<int>(100);
r2 = q2;
解答:
结果,所有指针指向的地址里面都存着42这个值。
除了有自主销毁等能力之外,shared_ptr指针和内置指针的使用方式是一样的。