Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct A
- {
- std::vector<int> x;
- A()
- {
- std::cout << "A()" << std::endl;
- }
- A(const A&a)
- {
- std::cout << "A(const A&)" << std::endl;
- x = a.x;
- }
- A(A&&a)
- {
- std::cout << "A(A&&)" << std::endl;
- x = std::move(a.x);
- }
- ~A()
- {
- std::cout << "~A()" << std::endl;
- }
- };
- struct B : public A
- {
- std::vector<int> y;
- B()
- {
- std::cout << "B()" << std::endl;
- }
- B(const A&a)
- {
- std::cout << "B(const A&)" << std::endl;
- x = a.x;
- y.resize(x.size());
- }
- B(A&&a) :A(std::move(a))
- {
- std::cout << "B(A&&)" << std::endl;
- std::cout << "a.x.size=" << a.x.size() << std::endl;
- std::cout << "x.size=" << x.size() << std::endl;
- y.resize(x.size());
- }
- B(const B&)
- {
- std::cout << "B(const B&)" << std::endl;
- }
- ~B()
- {
- std::cout << "~B()" << std::endl;
- }
- };
- A ret_a()
- {
- A a;
- a.x.resize(10);
- return a;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::cout << "section I" << std::endl << std::endl;
- A a = ret_a();
- B b(a);
- std::cout << "a.x.size=" << a.x.size() << std::endl;
- std::cout << std::endl << "section II" << std::endl << std::endl;
- B b2(ret_a());
- std::cout << "b.x.size=" << b.x.size() << std::endl;
- std::cout << std::endl << "section III" << std::endl << std::endl;
- return 0;
- }
- /* Output:
- section I
- A()
- A()
- B(const A&)
- a.x.size=10
- section II
- A()
- A(A&&)
- B(A&&)
- a.x.size=0
- x.size=10
- ~A()
- b.x.size=10
- section III
- ~B()
- ~A()
- ~B()
- ~A()
- ~A()
- */
Add Comment
Please, Sign In to add comment