Placement new - header?



  • hi,
    ich habe hier das Problem, dass ich placement new verwenden moechte und ein g++ hier anmeckert:

    error: no matching function for call to 'operator new(unsigned int, void*&)
    

    Das laesst sich ansich beheben, wenn ich den header <new> einbinde.

    1. Ist das immer so, dass ich den einbinden muss? Bei einem anderen g++ ist das naemlich nicht der Fall (um etwas konkreter zu werden: g++ (Gentoo 4.4.4-r2 p1.2, pie-0.4.5) 4.4.4 benoetigt kein #include <new> und kompiliert, waehrend g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3 auf ein eben solches include besteht).
    2. Laesst sich das Verhalten ggf. ueber eine Option abschalten? Bzw. was sagt der Standard dazu? Habe jetzt auf die Schnelle nichts finden koennen.

    Danke fuer eure Antworten.

    whocares.


  • Mod

    Welche Standardeader intern welche anderen Header einbinden ist nicht vorgegeben. Binde daher immer grundsätzlich alle Header ein die du brauchst, denn wie du siehst können sich indirekte Einbindungen ganz schnell ändern, selbst von Compilerversion zu Compilerversion und erst recht, wenn du mal einen anderen Compiler benutzt.



  • whocares? schrieb:

    [...] Bzw. was sagt der Standard dazu? Habe jetzt auf die Schnelle nichts finden koennen.

    Du kannst Dich nicht darauf verlassen, dass irgendwelche anderen Standard-Header <new> automatisch mit einbinden. So etwas gibt es nur, wenn es im Standard explizit so steht, dass Header X automatisch Header Y einbindet. Wenn du also Dinge aus <new> brauchst, binde diesen Header ein. Fertig.



  • Seit wann nimmt placement new als zweiten Parameter eine (mutable) Referenz auf nen void-Zeiger?



  • hustbaer schrieb:

    Seit wann nimmt placement new als zweiten Parameter eine (mutable) Referenz auf nen void-Zeiger?

    Das ist nur die Art von G++ Dir zu sagen, dass das zweite Argument ein Lvalue-Ausdruck war. Es hat nichts mit dem Placement-New Operator zu tun. Der wurde ja auch nicht gefunden.


Log in to reply