diff --git a/book/zh-cn/03-runtime.md b/book/zh-cn/03-runtime.md
index 3dd4ef1..b91bbee 100644
--- a/book/zh-cn/03-runtime.md
+++ b/book/zh-cn/03-runtime.md
@@ -267,16 +267,26 @@ int main()
class A {
public:
int *pointer;
- A():pointer(new int(1)) { std::cout << "构造" << pointer << std::endl; }
- A(A& a):pointer(new int(*a.pointer)) { std::cout << "拷贝" << pointer << std::endl; } // 无意义的对象拷贝
- A(A&& a):pointer(a.pointer) { a.pointer = nullptr;std::cout << "移动" << pointer << std::endl; }
- ~A(){ std::cout << "析构" << pointer << std::endl; delete pointer; }
+ A():pointer(new int(1)) {
+ std::cout << "构造" << pointer << std::endl;
+ }
+ A(A& a):pointer(new int(*a.pointer)) {
+ std::cout << "拷贝" << pointer << std::endl;
+ } // 无意义的对象拷贝
+ A(A&& a):pointer(a.pointer) {
+ a.pointer = nullptr;
+ std::cout << "移动" << pointer << std::endl;
+ }
+ ~A(){
+ std::cout << "析构" << pointer << std::endl;
+ delete pointer;
+ }
};
// 防止编译器优化
A return_rvalue(bool test) {
A a,b;
- if(test) return a;
- else return b;
+ if(test) return a; // 等价于 static_cast(a);
+ else return b; // 等价于 static_cast(b);
}
int main() {
A obj = return_rvalue(false);
diff --git a/code/3/3.4.cpp b/code/3/3.4.cpp
index 66ee35a..22ed740 100644
--- a/code/3/3.4.cpp
+++ b/code/3/3.4.cpp
@@ -10,22 +10,31 @@
class A {
public:
int *pointer;
- A():pointer(new int(1)) { std::cout << "构造" << pointer << std::endl; }
- A(A& a):pointer(new int(*a.pointer)) { std::cout << "拷贝" << pointer << std::endl; } // 无意义的对象拷贝
- A(A&& a):pointer(a.pointer) { a.pointer = nullptr;std::cout << "移动" << pointer << std::endl; }
- ~A(){ std::cout << "析构" << pointer << std::endl; delete pointer; }
+ A():pointer(new int(1)) {
+ std::cout << "构造" << pointer << std::endl;
+ }
+ A(A& a):pointer(new int(*a.pointer)) {
+ std::cout << "拷贝" << pointer << std::endl;
+ } // 无意义的对象拷贝
+ A(A&& a):pointer(a.pointer) {
+ a.pointer = nullptr;
+ std::cout << "移动" << pointer << std::endl;
+ }
+ ~A(){
+ std::cout << "析构" << pointer << std::endl;
+ delete pointer;
+ }
};
// 防止编译器优化
A return_rvalue(bool test) {
A a,b;
- if(test) return a;
- else return b;
+ if(test) return a; // 等价于 static_cast(a);
+ else return b; // 等价于 static_cast(b);
}
int main() {
A obj = return_rvalue(false);
std::cout << "obj:" << std::endl;
std::cout << obj.pointer << std::endl;
std::cout << *obj.pointer << std::endl;
-
return 0;
-}
+}
\ No newline at end of file