- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
#include <iostream>
class StaticClassData {
int *pointer, value;
public:
StaticClassData(): pointer(&value) {}
void add(int i) {
std::cout << "Hello, this is " << this << std::endl;
value = i;
std::cout << "I'm fine" << std::endl;
*pointer = i;
std::cout << "You never read this text" << std::endl;
}
};
class SomeClass {
struct StaticConstructor {
StaticConstructor(){ storage.add(1); }
};
static StaticConstructor constructor;
static StaticClassData storage;
};
SomeClass::StaticConstructor SomeClass::constructor;
StaticClassData SomeClass::storage;
int main(){}
Долго думал, с какого хрена программа падает на заполнении static поля в "статическом конструкторе". Поле вроде бы есть, но толку от этого мало.
http://ideone.com/Ux14ep - из раздела ub.govnokod.ru или как выстрелить себе в ногу до выполнения main.
1024-- 01.03.2014 00:09 # 0
guest 01.03.2014 01:20 # −5
1024-- 01.03.2014 08:44 # +3
Кстати, в итоге, удалось это всё запустить http://ideone.com/UxbQcu
bormand 01.03.2014 08:52 # +2
1024-- 01.03.2014 15:31 # +1
absolut 01.03.2014 09:21 # +1
1024-- 01.03.2014 15:35 # +2
Кстати, Вы создали указатель по какой-то важной причине, или просто так?
Вариант с просто полем http://ideone.com/g885dC мне кажется более уместным и чуть более быстрым.
absolut 01.03.2014 16:17 # +1
Dummy00001 01.03.2014 04:00 # +4
это еще что. первая С++ прога которую мне надо было "поднять" еще в добавок и потоки стартовала до main()а. и это было во времена когда отладчики еще абы как С++ поддерживали: загружаешь прогу, а отладчик тебе "программа неожиданно завершилась". потому что уже во время загрузки пытались брякпоинт в main() поставить. (gdb + gcc 2.95/3.х + линух, образца ~2001 года.)