Le sujet le plus proche de ma question est here. Je suis en train de compiler le code suivant avec gcc:Appeler le constructeur de classe à partir d'un nouvel opérateur sur GNU - utiliser la classe invalide
#include <malloc.h>
class A
{
public:
A(){};
~A(){};
};//class A
int main()
{
A* obj = (A*) malloc(sizeof(A));
if(obj==0) return 1 ;
obj->A::A(); /*error: invalid use of 'class A' */
obj->A::~A();
free(obj);
return 0;
};//
Depuis la ligne de commande je compilez le code avec:
$ g++ -o main main.cpp main.cpp: In function 'int main()': main.cpp:22: error: invalid use of 'class A'
Pouvez-vous s'il vous plaît me diriger dans la bonne direction?
duplication possible de [C++, est-il possible d'appeler un constructeur directement, sans nouveau?] (Http://stackoverflow.com/questions/2494471/c-is-it-possible-to-call-a-constructor -directement-sans-nouveau) – kennytm
Pourquoi le faites-vous de cette façon? Essayez-vous d'éviter les exceptions en cas d'échec? Utilisez simplement 'new (nothrow)', puis testez la valeur NULL. –
@Amardeep, un exemple auquel je peux penser est l'implémentation du serveur web-service, où vous ne pouvez pas supprimer des objets tant qu'ils sont sérialisés et quand ils sont sérialisés vous n'avez pas le thread de contrôle, donc vous ne pouvez pas appeler destructor -kit ou framework doit «libérer» cela. la mémoire fournie et gérée pour vous est à travers 'malloc' alors il n'y a pas d'autre moyen que de l'utiliser. * (et s'ils ne fournissent pas l'opérateur 'new' personnalisé, qui fait l'allocation sur leur tas et les supprime aussi.) * –