第十二章 12.1.2节练习

练习12.6
编写函数,返回一个动态分配的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指针和内置指针的使用方式是一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值