C++Primer第五版 12.1.5节练习
2016-01-21 10:18
579 查看
练习12.16:如果你试图拷贝或赋值unique_ptr,编译器并不总是能给出易于理解的错误信息。编写包含这种错误的程序,观察编译器如何诊断这种错误。
答:错误代码如下
练习12.17:下面的unique_ptr声明中,哪些是合法的,哪些可能导致后续的程序错误?解释每个错误的问题在哪里。
练习12.18:shared_ptr为什么没有release成员?
网上参考答案:release使智能指针和 指针分离了, 使用之后需要单独delete释放指针,如果只是当前shared_ptr, 就不叫”release”了
答:错误代码如下
#include <iostream> #include <memory> using namespace std; int main() { unique_ptr<int> p(new int(10)); unique_ptr<int> p1(p);//非法拷贝 unique_ptr<int> p2; p2 = p; //非法赋值 return 0; }
//编译器内容 [Error] use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]'
练习12.17:下面的unique_ptr声明中,哪些是合法的,哪些可能导致后续的程序错误?解释每个错误的问题在哪里。
int ix = 1024, *pi = &ix, *pi2 = new int(2048); typedef unique_ptr<int> IntP; (a) IntP p0(ix); //错误 类型不一致,无法赋值 (b) IntP p1(pi); //正确 p1指向pi2 (c) IntP p2(pi2); //正确 p2指向pi2 (d) IntP p3(&ix); //正确 p3指向ix的地址 (e) IntP p4(new int(2048)); //正确 (f) IntP p5(p2.get()); //正确
练习12.18:shared_ptr为什么没有release成员?
网上参考答案:release使智能指针和 指针分离了, 使用之后需要单独delete释放指针,如果只是当前shared_ptr, 就不叫”release”了
相关文章推荐
- C++学习 【3.2】 程序设计初步---输入、输出&关系运算、逻辑运算
- C++学习之继承篇(is a:用子类对象给基类对象赋值或初始化)
- C++学习 【3.1】 程序设计初步---算法、结构、赋值语句
- C语言学习之数组指针和指针数组
- [置顶] C++实现读取文本文件数据到vector中
- C++异常处理及函数堆栈信息打印
- C++应用程序路径获取及操作
- Python与C++结构体交互
- C++之路进阶——树套树(陌上花开)
- C++ Unicode SBCS 函数对照表,以备日后查阅
- C++智能指针笔记
- C++11新特性
- 浅谈C语言中的位段
- C语言实现双向循环链表
- 修练8年C++面向对象程序设计之体会
- C语言宏定义作用、使用方法小结(1)
- C语言排序算法
- 用C语言实现大小端判断
- 关于C++中的'extern &quot;C&quot;'
- C++中cin/cout高级格式化操作