2010-10-11 15 views
11

Czy mogę wywołać nowe położenie C++ na konstruktorach z parametrami? Wdrażam niestandardowy program przydzielający i chcę uniknąć konieczności przenoszenia funkcji z innych niż domyślne konstruktorów do funkcji init.Umieszczanie nowych i innych niż domyślne konstruktorów

class CFoo 
{ 
public: 
    int foo; 
    CFoo() 
    { 
     foo = 0; 
    } 

    CFoo(int myFoo) 
    { 
     foo = myFoo; 
    } 
}; 

CFoo* foo = new (pChunkOfMemory) CFoo(42); 

byłoby oczekiwać, obiekt typu CFoo być skonstruowane w pChunkOfMemory pomocą drugiego konstruktora. Korzystając z operatora new, utknąłem tylko z domyślnymi konstruktorami?

Rozwiązany! Nie miałem #include <new>. Następnie wywołanie miejsca docelowego :: new działało poprawnie z innymi niż domyślnymi konstruktorami.

+2

Czy próbowałeś? –

+0

Tak - błąd C2660: "operator nowy": funkcja nie przyjmuje 2 argumentów. Czy masz odpowiedź na to pytanie? –

+4

Czy nowe miejsce docelowe bez argumentów konstruktora działa w tym samym kontekście? Czy pamiętasz "#include "? – aschepler

Odpowiedz

16

Aby korzystać umieszczenie nowego, trzeba zawierać nagłówek <new>:

#include <new> 

Inaczej formy lokowania operator new nie są zdefiniowane.

+0

Sukces! Nie mogę uwierzyć, że zmagałem się z tym przez cały dzień i to był brakujący plik włączający. D'oh! Dzięki GMan i Aschelper. –

+0

@ Chris: Yup. Łatwo jest zapomnieć o tych małych nagłówkach, ponieważ są one często dołączane przez inne, które są prawie zawsze uwzględniane. – GManNickG

+4

W tym '' jest praktyczną odpowiedzią na pytanie OP, ale informacje podane w pierwszym wierszu powyżej są nieprawidłowe. Nie trzeba dodawać 'nowej', ale należy zdefiniować odpowiednią funkcję przydziału' operator new' (jako członek lub w globalnej przestrzeni nazw). Do OP: aby korzystać z funkcji globalnej alokacji, powinieneś ogólnie pisać ':: new', a nie tylko" new ", gdy używasz miejsca docelowego" konstruuj w miejscu "; w przeciwnym razie możesz wybrać funkcję przydzielania członków. –

Powiązane problemy