ferencd@0: #include ferencd@0: ferencd@0: class rvmove { ferencd@0: public: ferencd@0: void *ptr; ferencd@0: char *array; ferencd@0: ferencd@0: rvmove() ferencd@0: : ptr(0), ferencd@0: array(new char[10]) ferencd@0: { ferencd@0: ptr = this; ferencd@0: } ferencd@0: ferencd@0: rvmove(rvmove &&other) ferencd@0: : ptr(other.ptr), ferencd@0: array(other.array) ferencd@0: { ferencd@0: other.array = 0; ferencd@0: other.ptr = 0; ferencd@0: } ferencd@0: ferencd@0: ~rvmove() ferencd@0: { ferencd@0: assert(((ptr != 0) && (array != 0)) || ((ptr == 0) && (array == 0))); ferencd@0: delete[] array; ferencd@0: } ferencd@0: ferencd@0: rvmove &operator=(rvmove &&other) ferencd@0: { ferencd@0: delete[] array; ferencd@0: ptr = other.ptr; ferencd@0: array = other.array; ferencd@0: other.array = 0; ferencd@0: other.ptr = 0; ferencd@0: return *this; ferencd@0: } ferencd@0: ferencd@0: static rvmove create() ferencd@0: { ferencd@0: return rvmove(); ferencd@0: } ferencd@0: private: ferencd@0: rvmove(const rvmove &); ferencd@0: rvmove &operator=(const rvmove &); ferencd@0: }; ferencd@0: ferencd@0: int main() ferencd@0: { ferencd@0: rvmove mine; ferencd@0: if (mine.ptr != &mine) ferencd@0: return 1; ferencd@0: mine = rvmove::create(); ferencd@0: if (mine.ptr == &mine) ferencd@0: return 1; ferencd@0: return 0; ferencd@0: }