C++ Primer 课后习题详解 | 12.1.2 直接管理内存
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 课后习题详解 | 12.1.2 直接管理内存相关的知识,希望对你有一定的参考价值。
🎈 作者: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 所指内存引用计数加一。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于C++ Primer 课后习题详解 | 12.1.2 直接管理内存的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 课后习题详解 | 2.1.2 类型转换