Re[8]: 2D-Linq и оптимизация цифровых фильтров - 3
От: vdimas Россия  
Дата: 10.07.18 10:38
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>ЕМНИП не обнуляется, а туда какой-то код заносится, чтобы он по возможности исключение генерировал при попытке использовать неинициализированное значение. Помню, там что-то вроде 0xbdbdbdbd где-то было.


Предлагаю прогнать на своей рабочей Студии вот это:
#include <iomanip>
#include <iostream>

class Base {
private:
    size_t i;
};

class Derived : Base {};

template<typename T>
void test() {
    using namespace std;

    T * t = new T();
    cout << "new T():  " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    T * t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;


    t = new T;
    cout << "new T:    " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
}

int main()
{
    using namespace std;

    cout << "Base:" << std::endl;
    test<Base>();

    cout << std::endl;
    
    cout << "Derived:" << std::endl;
    test<Derived>();

    return 0;
}

Мои результаты:
Debug:
Base:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd

Derived:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd


Release:
Base:
new T():  0000000000000000
delete t: 0000000000000000
new T:    6e69575c32336d65
delete t: 6e69575c32336d65

Derived:
new T():  0000000000000000
delete t: 0000000000000000
new T:    4620004300000000
delete t: 4620004300000000
Отредактировано 10.07.2018 10:45 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.