File tree Expand file tree Collapse file tree 2 files changed +33
-14
lines changed Expand file tree Collapse file tree 2 files changed +33
-14
lines changed Original file line number Diff line number Diff line change @@ -267,16 +267,26 @@ int main()
267
267
class A {
268
268
public:
269
269
int *pointer;
270
- A():pointer(new int(1)) { std::cout << "构造" << pointer << std::endl; }
271
- A(A& a):pointer(new int(*a.pointer)) { std::cout << "拷贝" << pointer << std::endl; } // 无意义的对象拷贝
272
- A(A&& a):pointer(a.pointer) { a.pointer = nullptr;std::cout << "移动" << pointer << std::endl; }
273
- ~A(){ std::cout << "析构" << pointer << std::endl; delete pointer; }
270
+ A():pointer(new int(1)) {
271
+ std::cout << "构造" << pointer << std::endl;
272
+ }
273
+ A(A& a):pointer(new int(*a.pointer)) {
274
+ std::cout << "拷贝" << pointer << std::endl;
275
+ } // 无意义的对象拷贝
276
+ A(A&& a):pointer(a.pointer) {
277
+ a.pointer = nullptr;
278
+ std::cout << "移动" << pointer << std::endl;
279
+ }
280
+ ~A(){
281
+ std::cout << "析构" << pointer << std::endl;
282
+ delete pointer;
283
+ }
274
284
};
275
285
// 防止编译器优化
276
286
A return_rvalue(bool test) {
277
287
A a,b;
278
- if(test) return a;
279
- else return b;
288
+ if(test) return a; // 等价于 static_cast<A&&>(a);
289
+ else return b; // 等价于 static_cast<A&&>(b);
280
290
}
281
291
int main() {
282
292
A obj = return_rvalue(false);
Original file line number Diff line number Diff line change 10
10
class A {
11
11
public:
12
12
int *pointer;
13
- A ():pointer(new int (1 )) { std::cout << " 构造" << pointer << std::endl; }
14
- A (A& a):pointer(new int (*a.pointer)) { std::cout << " 拷贝" << pointer << std::endl; } // 无意义的对象拷贝
15
- A (A&& a):pointer(a.pointer) { a.pointer = nullptr ;std::cout << " 移动" << pointer << std::endl; }
16
- ~A (){ std::cout << " 析构" << pointer << std::endl; delete pointer; }
13
+ A ():pointer(new int (1 )) {
14
+ std::cout << " 构造" << pointer << std::endl;
15
+ }
16
+ A (A& a):pointer(new int (*a.pointer)) {
17
+ std::cout << " 拷贝" << pointer << std::endl;
18
+ } // 无意义的对象拷贝
19
+ A (A&& a):pointer(a.pointer) {
20
+ a.pointer = nullptr ;
21
+ std::cout << " 移动" << pointer << std::endl;
22
+ }
23
+ ~A (){
24
+ std::cout << " 析构" << pointer << std::endl;
25
+ delete pointer;
26
+ }
17
27
};
18
28
// 防止编译器优化
19
29
A return_rvalue (bool test) {
20
30
A a,b;
21
- if (test) return a;
22
- else return b;
31
+ if (test) return a; // 等价于 static_cast<A&&>(a);
32
+ else return b; // 等价于 static_cast<A&&>(b);
23
33
}
24
34
int main () {
25
35
A obj = return_rvalue (false );
26
36
std::cout << " obj:" << std::endl;
27
37
std::cout << obj.pointer << std::endl;
28
38
std::cout << *obj.pointer << std::endl;
29
-
30
39
return 0 ;
31
- }
40
+ }
You can’t perform that action at this time.
0 commit comments