我正在“手动”玩动态内存分配,我想看看 MS 的人是如何实现 placement new 的,但是在调试时我“介入”了它,这让我开始编写代码:
inline void *__CRTDECL operator new(size_t, void *_Where) _THROW0()
{ // construct array with placement at _Where
return (_Where);
}
当我在这段代码中看到的所有内容都与 return 语句以及我作为参数提供的内容一致时,谁能向我解释这段代码到底是如何将我的对象放置到我的指针指向的位置的。我不认为在评论中说出我希望这个 fnc 做的事情实际上足以让它发挥作用。 感谢您提供任何建设性的答案。
最佳答案
operator new
的目的只是为一个对象分配内存,并返回指向该内存的指针。当你使用 placement new 时,你实际上是在告诉编译器“我知道这 block 内存很好,跳过分配,并为我的对象使用这个指针。”然后使用 operator new
提供的指针调用对象的构造函数,无论它是刚刚分配的内存还是使用 placement new 指定的内存。 operator new
本身与对象的构造方式没有任何关系。
关于c++ - 魔术放置新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731838/