utiliza studio sirve que para objective c++

c++ - studio - memset objective c



memset para inicialización en C++ (2)

Es una idea terrible. Solo está revisando los datos, sin prestar atención a cómo deben inicializarse los objetos. Si su clase es virtual, es probable que también elimine el puntero vtable.

memset funciona con datos sin procesar, pero C ++ no se trata de datos sin procesar. C ++ crea abstracciones, por lo que si quiere estar seguro, use esas abstracciones. Usa la lista de inicializadores para inicializar miembros.

Puedes hacerlo a tipos de POD:

struct nothing_fancy_here { bool b; int i; void* p; }; nothing_fancy_here x; memset(&x, 0, sizeof(x));

Pero si lo está haciendo con this , eso significa que está en un constructor definido por el usuario y ya no califica como un tipo de POD. (Aunque si todos sus miembros son POD, podría funcionar, siempre y cuando ninguno contenga 0 como valor de captura. No estoy seguro de si alguna otra fuente de comportamiento indefinido entra en juego aquí).

memset se usa a veces para inicializar datos en un constructor como el siguiente ejemplo. ¿Funciona en general? ¿Es una buena idea en general?

class A { public: A(); private: int a; float f; char str[35]; long *lp; }; A::A() { memset(this, 0, sizeof(*this)); }


No uses memset . Es un remanente de C y no funcionará en no POD. Específicamente, su uso en una clase derivada que contiene cualquier función virtual, o cualquier clase que contenga una no incorporada, resultará en un desastre.

C ++ proporciona una sintaxis específica para la inicialización:

class A { public: A(); private: int a; float f; char str[35]; long *lp; }; A::A() : a(0), f(0), str(), lp(NULL) { }

Para ser honesto, no estoy seguro, pero memset también puede ser una mala idea en puntos flotantes, ya que su formato no está especificado.