История изменений
Исправление alysnix, (текущая версия) :
ну вот скажите как в языке с ООП, вы будете писать менеджер кучи, который просто выделяет память, не представляя, что в нее будет положено?
типизация указателя говорит о том, какой тип лежит по этому адресу, и чтобы там лежал такой тип, должен быть сначала вызван конструктор на этот участок памяти.
то есть от выделения куска памяти, до инициализации его как корректного значения некоторого типа, дистанция огромного размера. вот на этой дистанции и нужен address, он же void*.
предложение использовать например u8* вместо void* ложно, это лишь наделяет u8* особыми свойствами, которые есть у void*.
все эти memset, getmem, memcpy и прочие, используют void* и не могут использовать char*(или u8*), потому что пришлось бы или везде втыкать преобразования типов в u8*, или делать u8* совместимым со всеми прочими указателями, и сломать строгую типизацию тут. то есть если T* будет по дефолту приводиться к u8* - это будет страшно вообще.
Исправление alysnix, :
ну вот скажите как в языке с ООП, вы будете писать менеджер кучи, который просто выделяет память, не представляя, что в нее будет положено?
типизация указателя говорит о том, какой тип лежит по этому адресу, и чтобы там лежал такой тип, должен быть сначала вызван конструктор на этот участок памяти.
то есть от выделения куска памяти, до инициализации его как корректного значения некоторого типа, дистанция огромного размера. вот на этой дистанции и нужен address, он же void*.
предложение использовать например u8* вместо void* ложно, это лишь наделяет u8* особыми свойствами, которые есть у u8.
все эти memset, getmem, memcpy и прочие, используют void* и не могут использовать char*(или u8*), потому что пришлось бы или везде втыкать преобразования типов в u8*, или делать u8* совместимым со всеми прочими указателями, и сломать строгую типизацию тут. то есть если T* будет по дефолту приводиться к u8* - это будет страшно вообще.
Исходная версия alysnix, :
ну вот скажите как в языке с ООП, вы будете писать менеджер кучи, который просто выделяет память, не представляя, что в нее будет положено?
типизация указателя говорит о том, какой тип лежит по этому адресу, и чтобы там лежал такой тип, должен быть сначала вызван конструктор на этот участок памяти.
то есть от выделения куска памяти, до инициализации его как корректного значения некоторого типа, дистанция огромного размера. вот на этой дистанции и нужен address, он же void*.
предложение использовать например u8* вместо void* ложно, это лишь наделяет u8* особыми свойствами, которые есть у u8.
все эти memset, getmem, memcpy и прочие, используют void* и не могут использовать char*, потому что пришлось или везде втыкать преобразования типов в char*, или делать char* совместимым со всеми прочими указателями, и сломать строгую типизацию тут. то есть если T* будет по дефолту приводиться к char* - это будет страшно вообще.