У меня есть кусок кода, как это:Почему первый элемент уничтожен?
class Data
{
public:
Data(const std::vector<int> &_data)
{
my_data = _data;
}
private:
std::vector<int> my_data;
};
int main()
{
std::vector<std::shared_ptr<Data>> vec = {
std::shared_ptr<Data>(new Data(std::vector<int>({ 1, 2 ,3 }))),
std::shared_ptr<Data>(new Data(std::vector<int>({ 3, 4 ,5 })))
};
// breakpoint
return 0;
}
каким-то образом, когда я приостановить программу для проверки значений (в контрольной точке), первый элемент (vec[0]
) уничтожается, а второй один (vec[1]
) отлично. Что здесь происходит? Это ошибка в компиляторе? Я использую новую Visual Studio 2013.
Вы отказали отладку в деструкторе 'Data :: ~ Data()' для подтверждения этого? И вы можете компилировать с помощью отладочных символов в release-сборке? – WhozCraig
Да, я добавил «Data :: ~ Data()», чтобы проверить, уничтожен ли объект, и в обоих случаях Debug и Release это именно то, что произошло. – Qwrk
Я вижу то же самое с приведенным выше кодом и приведенной выше настройкой. Как отладочные, так и выпускные сборки показывают одинаковое поведение. Вот результат, когда я добавляю trace 'cout' в код: * 1 * ** 'Data :: Data()' **, затем * 2 * ** 'Data :: Data()' **, затем * 3 * ** 'Data :: ~ Data()' **, затем * 4 * ** 'BREAKPOINT' ** и, наконец, * 5 * **' Data :: ~ Data() '**. – yzt