std::vector вызов деструкторов объектов
От: onegold Россия  
Дата: 01.07.06 16:43
Оценка:
Столкнулся с одной проблемкой.
Есть такой код написанный в VC 7.1


#include <iostream>
#include <vector>

class Temp
{
public:
    Temp(int i)
        : value_(i)
    {
        std::cout << "Ctor " << value_ << std::endl;
    }
    ~Temp()
    {
        std::cout << "Dtor " << value_ << std::endl;
    }
    int value_;
};

int main(int argc, char* argv[])
{
    std::vector<Temp> vec;
    Temp one(1);
    vec.push_back(one);
    Temp two(2);
    vec.push_back(two);
    return 0;
}


По моим понятиям колличество конструкторов должно соответствовать количеству деструкторов
А получаю:
Ctor 1
Dtor 1
Ctor 2
Dtor 1
Dtor 2
Dtor 2
Dtor 1
Dtor 1
Dtor 2

Обыясните пожалуйста.
Заранее спасибо за ответы.
Re: std::vector вызов деструкторов объектов
От: Roman Odaisky Украина  
Дата: 01.07.06 16:48
Оценка: 2 (1)
Здравствуйте, onegold, Вы писали:

O>По моим понятиям колличество конструкторов должно соответствовать количеству деструкторов

O>А получаю:
O>Ctor 1
O>Dtor 1
O>Ctor 2
O>Dtor 1
O>Dtor 2
O>Dtor 2
O>Dtor 1
O>Dtor 1
O>Dtor 2

O>Обыясните пожалуйста.


А ты объяви конструктор копий
Автор: CEMb
Дата: 25.05.06
и посчитай количество вызовов. У тебя же объекты в vector'е конструируются не дефолтным конструктором, а копирующим.
До последнего не верил в пирамиду Лебедева.
Re[2]: std::vector вызов деструкторов объектов
От: onegold Россия  
Дата: 01.07.06 16:57
Оценка:
RO>А ты объяви конструктор копий
Автор: CEMb
Дата: 25.05.06
и посчитай количество вызовов. У тебя же объекты в vector'е конструируются не дефолтным конструктором, а копирующим.


Спасиба. Тормознул...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.