Re[3]: проблема с move семантикой
От: _niko_ Россия  
Дата: 28.08.18 06:50
Оценка:
Здравствуйте, Vinick, Вы писали:

V>А можно пальцем ткнуть? Я хоть убей не вижу. Вроде все объекты на которые хранятся указатели, лежат на стеке в main.


Добавь логирование this, например в класс Dim:

struct Dim {
    Cross * ptr;
    explicit  Dim(Cross * c) :ptr(c) {
        std::cout << "Dim(Cross*) = " << (uint64_t)this << " : " << (uint64_t)ptr << std::endl;
    }
    Dim(Dim && d) :ptr(d.ptr) {
        std::cout << "Dim(&&) = " << (uint64_t)this << " : " << (uint64_t)ptr << std::endl;
    }
    ~Dim() {
        std::cout << "~Dim() = " << (uint64_t)this << std::endl;
    }
    Group group() {
        std::cout << "Dim::group = " << (uint64_t)this << std::endl;
        Group g(this);
        return g;
    }
};


Вот output из ideone.com:
Cross() = 140727019914912
Dim(Cross*) = 140727019914960 : 140727019914912
Op(D&&) = 140727019914976 : 140727019914912
Op(&&) = 140727019914928 : 140727019914912
Cons(Op&&) = 140727019914928 : 140727019914912
~Dim() = 140727019914960
cons1 10
Dim::group = 140727019914960
Group(Dim*) = 140727019914960 : 140727019914960
Op(D&&) = 140727019914976 : 140727019914960
Op(&&) = 140727019914944 : 140727019914960
Cons(Op&&) = 140727019914944 : 140727019914960
-1878505776
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.