Вчера я прочитал код своего сослуживца и наткнулся на это:Удаление всех членов класса
class a_class
{
public:
a_class() {...}
int some_method(int some_param) {...}
int value_1;
int value_2;
float value_3;
std::vector<some_other_class*> even_more_values;
/* and so on */
}
a_class a_instances[10];
void some_function()
{
do_stuff();
do_more_stuff();
memset(a_instances, 0, 10 * sizeof(a_class)); // <===== WTF?
}
Это правовой (ВТФ линии, а не государственные атрибуты)? Для меня это действительно пахнет, действительно плохо ... Код сработал отлично при компиляции с VC8, но он генерирует «неожиданное исключение» при компиляции с VC9 при вызове a_instances[0].event_more_values.push_back(whatever)
, но при доступе к любому другому члену. Какие-нибудь идеи?
РЕДАКТИРОВАТЬ: Изменено значение от memset(&a_instances...
до memset(a_instances...
. Спасибо, что указали на Эдуарда.
EDIT2: Удален тип возврата ctor. Спасибо, лампочка.
Заключение: Спасибо, ребята, вы подтвердили мое подозрение.
Хорошо, вы меня там. Конечно, в исходном коде это не было и не было, но a_instances. Изменен код соответственно. Благодарю. – EricSchaefer
Хорошо, я меняю свой ответ. –