Salut, je me suis exercé avec le placement nouveau et l'utiliser pour créer des objets. Considérez ce qui suit:différence entre (void *) et &
class PNewTesting
{
private:
string words;
public:
PNewTesting(const string & w = "Placement new testing");
};
PNewTesting::PNewTesting(const string & w)
{
words = w;
cout << words << " constructed" << endl;
}
int main()
{
char * buffer = new char[BUF];
PNewTesting *p1,*p2;
p1 = new (buffer)PNewTesting;
p2 = new PNewTesting("Placing object in heap");
cout << "Memory addresses: " << endl;
cout << "buffer: " << (void *)buffer << endl;
cout << "object placed in buffer: " << p1 << endl;
cout << "object in heap: " << p2 << endl;
}
La partie est me source de confusion, est que quand j'écris cout << "buffer: " << &buffer << endl;
, cela me donnerait une adresse différente de l'écriture cout << "buffer: " << (void *)buffer << endl;
La question est quelle est la différence entre &buffer
et (void*)buffer
, et pourquoi chacun d'entre eux me donne une adresse différente.
Ceci est complètement indépendant du placement nouveau, btw. –
Ah désolé, juste un débutant en C++ donc je ne m'en suis pas rendu compte. –
C'est parfaitement bien.Mais maintenant vous savez :) –