La riga di codice:
B* b = new (a) B(some initial values...);
sta usando una "placement new".
Il comportamento predefinito; sta creando il nuovo oggetto di tipo B
nella stessa posizione di memoria dell'oggetto a
. Se ci sono sovraccarichi associati per il posizionamento nuovo, il comportamento sarebbe codificato nel sovraccarico, che potrebbe includere anche un comportamento di tipo predefinito.
Il codice deve essere considerata con eventuali sovraccarichi, layout della memoria degli oggetti e come le classi A
e B
riferiscono a vicenda.
È insolito creare un oggetto sulla posizione di un oggetto precedentemente creato. Immagino che ci sia del codice tra questi due qui presentato che decostruisce (ma lascia ancora la memoria "allocata") l'oggetto precedente a
prima di costruire il nuovo al suo posto.
Il isocpp FAQ ha qualche ulteriore consiglio sull'uso di questa tecnica e dei suoi pericoli.
Google "placement new" – Bathsheba
hairstpling: questo non è il codice dei costruttori, ma questo codice chiama il costruttore. – user463035818
Ma sembra strano utilizzare il posizionamento nuovo su qualche altra istanza di classe - A. – marcinj