#include "pip.h" #include "piiostream.h" #include "pibytearray.h" #include #include using namespace PICoutManipulators; #define SZ 256 class A { public: A() : id_(666) { arr = new int[SZ]; piCout << "def A()" << id_ << this << arr; } A(int id) : id_(id) { arr = new int[SZ]; piCout << "A(int)" << id_ << this << arr; } A(const A & a) { arr = new int[SZ]; id_ = a.id_; piCout << "A(A)" << id_ << this << arr; } A(A && a) { std::swap(id_, a.id_); std::swap(arr, a.arr); piCout << "move A(A)" << id_ << this << arr; } ~A() { if (arr) { memset(arr, 0, SZ * 4); delete arr; } piCout << "~A()" << id_ << this << arr; //id_ = 0; } inline A & operator =(const A & a) { id_ = a.id_; piCout << "A =" << id_ << this; return *this; } inline A & operator =(A && a) { std::swap(id_, a.id_); std::swap(arr, a.arr); piCout << "move A=" << id_ << this; return *this; } private: int id_ = -1; int * arr = 0; }; //class B { //public: // B() {a_ = nullptr;} // ~B() {if (a_) delete a_;} // void setA(A && a) { // a_ = (A *)malloc(sizeof(a)); // memcpy(a_, &a, sizeof(a)); // operator delete(&a); // } // void setA(const A & a) {a_ = new A(a);} //private: // A * a_; //}; int main(int argc, char * argv[]) { piCout << "pip 3.1"; { PIDeque v; //A a; //v.push_back(a); //v.push_back(std::move(a)); v.push_back(A(1)); v.push_back(A(2)); v.push_back(A(3)); } piCout << ""; piCout << "std"; { std::vector v; v.push_back(A(1)); v.push_back(A(2)); v.push_back(A(3)); } return 0; }