diff --git a/ch12/README.md b/ch12/README.md index 312dbac..110e076 100644 --- a/ch12/README.md +++ b/ch12/README.md @@ -141,13 +141,14 @@ typedef unique_ptr IntP; (e) IntP p4(new int(2048)); (f) IntP p5(p2.get()); ``` - +注:“合法”意味着编译可以通过,但不代表不会产生错误! * (a) 不合法。在定义一个 unique_ptr 时,需要将其绑定到一个new 返回的指针上。 -* (b) 合法。但是可能会有后续的程序错误。当 p1 被释放时,p1 所指向的对象也被释放,所以导致 pi 成为一个空悬指针。 + 编译时报错: invalid conversion from 'int' to 'std::unique_ptr::pointer { aka int* }' [-fpermissive] +* (b) 合法。但是可能会有后续的程序错误。当 p1 被释放时,其实际所指向的对象 —— ix 也会被释放,但是 ix 并非通过 new 创建,所以此时操作系统会报错。 * (c) 合法。但是也可能会使得 pi2 成为空悬指针。 -* (d) 不合法。当 p3 被销毁时,它试图释放一个栈空间的对象。 +* (d) 合法。但是当 p3 被销毁时,它试图释放一个栈空间的对象。 * (e) 合法。 -* (f) 不合法。p5 和 p2 指向同一个对象,当 p5 和 p2 被销毁时,会使得同一个指针被释放两次。 +* (f) 合法。但是p5 和 p2 指向同一个对象,当 p5 和 p2 被销毁时,会使得同一个指针被释放两次。 ## 练习12.18