Skip to content

Commit fed4dcc

Browse files
author
Wang Jiazi
committed
Move semantics and RVO/NRVO
1 parent b0abd21 commit fed4dcc

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed

C++/RVO_NRVO/MoveAndRVO/Makefile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
all:RVO NRVO
2+
RVO: rvo.cpp
3+
g++ rvo.cpp -std=c++11 -o $@
4+
NRVO: nrvo.cpp
5+
g++ nrvo.cpp -std=c++11 -o $@
6+
7+
run:
8+
./RVO
9+
@echo -e "+++++++++++++++++++++++++++++++++++\n\n"
10+
./NRVO
11+
12+
clean:
13+
rm -rf RVO NRVO

C++/RVO_NRVO/MoveAndRVO/nrvo.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include "object.h"
2+
3+
int main()
4+
{
5+
{
6+
std::cout << "==============================\n";
7+
auto obj1 = getTestWithName();
8+
std::cout << "===========================\n";
9+
}
10+
11+
{
12+
std::cout << "\n===========================\n";
13+
auto obj2 = std::move(getTestWithName());
14+
std::cout << "===========================\n";
15+
}
16+
17+
{
18+
std::cout << "\n===========================\n";
19+
Test obj3; obj3 = getTestWithName();
20+
std::cout << "===========================\n";
21+
}
22+
23+
{
24+
std::cout << "\n===========================\n";
25+
Test obj4; obj4 = std::move(getTestWithName());
26+
std::cout << "===========================\n";
27+
}
28+
}

C++/RVO_NRVO/MoveAndRVO/object.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <string>
4+
5+
struct Test {
6+
Test()
7+
{
8+
std::cout << "Construct function" << std::endl;
9+
}
10+
11+
Test(const Test&)
12+
{
13+
std::cout << "Copy construct function" << std::endl;
14+
}
15+
16+
Test& operator=(const Test&)
17+
{
18+
std::cout << "Copy assignment function" << std::endl;
19+
return *this;
20+
}
21+
22+
23+
Test(Test&&)
24+
{
25+
std::cout << "Move construct function" << std::endl;
26+
}
27+
28+
29+
Test& operator=(Test &&t)
30+
{
31+
std::cout << "Move assignment Function" << std::endl;
32+
return *this;
33+
}
34+
35+
~Test()
36+
{
37+
std::cout << "Destruct function" << std::endl;
38+
}
39+
};
40+
41+
Test getTest()
42+
{
43+
return Test();
44+
}
45+
46+
Test getTestWithName()
47+
{
48+
Test temp;
49+
return temp;
50+
}

C++/RVO_NRVO/MoveAndRVO/rvo.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include "object.h"
2+
3+
int main()
4+
{
5+
{
6+
std::cout << "==============obj1 = getTest()================\n";
7+
auto obj1 = getTest();
8+
std::cout << "===========================\n";
9+
}
10+
11+
{
12+
std::cout << "\n=============obj2 = std::move(getTest())==============\n";
13+
auto obj2 = std::move(getTest());
14+
std::cout << "===========================\n";
15+
}
16+
17+
{
18+
std::cout << "\n===========================\n";
19+
Test obj3; obj3 = getTest();
20+
std::cout << "===========================\n";
21+
}
22+
23+
{
24+
std::cout << "\n===========================\n";
25+
Test obj4; obj4 = std::move(getTest());
26+
std::cout << "===========================\n";
27+
}
28+
}

0 commit comments

Comments
 (0)