Здравствуйте, 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