🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: C/C++面试通关【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
本篇文章是对 「C++ Primer 第五版」 第 12.1.12 节课后习题 12.6 ~ 12.9 的讲解。
一、练习 12.6
1.1 题目描述
编写函数,返回一个动态分配的 int 的 vector。将此 vector 传递给另外一个函数,这个函数读取标准输入,将读入的值保存在 vector 元素中。再将 vector 传递给另外一个函数,打印读入的值。记得在恰当的时刻 delete vector。
1.2 题目解析
代码实现如下所示。
-
#include <iostream>
-
#include <vector>
-
-
std::vector<int> *vectorMalloc()
-
{
-
return
new std::vector<
int>;
-
}
-
-
void readValue(std::vector<int>* p)
-
{
-
int val;
-
std::cin>>val;
-
p->
push_back(val);
-
}
-
-
void printValue(std::vector<int>* p)
-
{
-
for (
const
auto i : *p) {
-
std::cout<<i<<std::endl;
-
}
-
}
-
-
int main()
-
{
-
auto p =
vectorMalloc();
-
readValue(p);
-
printValue(p);
-
delete p;
-
return
0;
-
}
二、练习 12.7
2.1 题目描述
重做上一题,这次使用 shared_ptr 而不是内置指针。
2.2 题目解析
代码实现如下所示。
-
#include <iostream>
-
#include <vector>
-
#include <memory>
-
-
typedef std::shared_ptr<std::vector<
int>> sharePtrVector;
-
-
sharePtrVector vectorMalloc()
-
{
-
return std::make_shared<std::vector<
int>>();
-
}
-
-
void readValue(sharePtrVector p)
-
{
-
int val;
-
std::cin>>val;
-
p->
push_back(val);
-
}
-
-
void printValue(sharePtrVector p)
-
{
-
for (
const
auto i : *p) {
-
std::cout<<i<<std::endl;
-
}
-
}
-
-
int main()
-
{
-
auto p =
vectorMalloc();
-
readValue(p);
-
printValue(p);
-
return
0;
-
}
三、练习 12.8
3.1 题目描述
下面的函数是否有错误?如果有,解释错误原因。
-
bool b()
-
{
-
int* p =
new
int;
-
// ...
-
return p;
-
}
3.2 解题思路
函数返回类型错误,应该是 int*,上述代码中,p 将转换为 bool 类型。这样写编译器一般检查不出来错误,会导致内存泄漏问题。
四、练习 12.9
4.1 题目描述
解释下面代码执行的结果:
-
#include <iostream>
-
-
using
namespace std;
-
-
int main()
-
{
-
int *q =
new
int(
42), *r =
new
int(
100);
-
r = q;
-
auto q2 =
make_shared<
int>(
42), r2 =
make_shared<
int>(
100);
-
r2 = q2;
-
return
0;
-
}
4.2 题目解析
首先,执行 r = q 后,并没有指针指向原 r 指向的内存,造成内存泄漏。
执行 r2 = q2 后,r2 原指内存空间引用计数减一变为 0,所在内存空间被释放,q2 所指内存引用计数加一。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
转载:https://blog.csdn.net/u011074149/article/details/128429437
查看评论