Jest to bardzo podobne pytanie do jednego, że ja tu odpowiedzi: link text
w skrócie, nie, to nie jest bezpieczne według standardu C++.Jeśli z jakiegoś powodu potrzebujesz obiektu SOME_STRUCT przydzielonego w obszarze pamięci, który ma różnicę w wielkości od size_of(SOME_STRUCT)
(i lepiej byłoby być większym!), Lepiej jest użyć funkcji przydzielania surowców, takiej jak globalna operator new
, aby wykonać przydzielanie i tworzenie instancji obiektu w pamięci pierwotnej z miejscem docelowym new
. Miejsce docelowe new
będzie bardzo tanie, jeśli typ obiektu nie ma konstruktora.
void* p = ::operator new(cb);
SOME_STRUCT* pSS = new (p) SOME_STRUCT;
// ...
delete pSS;
To będzie działać przez większość czasu. Powinno zawsze działać, jeśli SOME_STRUCT
jest POD-struct. Będzie również działać w innych przypadkach, jeśli konstruktor SOME_STRUCT
nie wyrzuci, a jeśli SOME_STRUCT
nie ma niestandardowego operatora, usuń. Ta technika eliminuje również potrzebę wykonywania rzutów.
::operator new
i ::operator delete
są najbliżej odpowiednik C++ 's do malloc
i free
i jako takie (w przypadku braku zadajnikami klasa) nazywane są odpowiednio przez new
i delete
wyrażeń mogą (ostrożnie!) Być używane w połączeniu.