c++ - 魔术放置新?

标签 c++ memory-management placement-new

我正在“手动”玩动态内存分配,我想看看 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/

相关文章:

c++ - 调用 placement new 时,将指针强制转换为 "void*"有什么影响吗?

C++ 函数不适用于我的两个变量

c++ - 识别地址是否属于堆或堆栈或寄存器

c++ - C++ placement new 如何工作?

c++ - Matlab 是否在 MEX/C 代码中阻止或拦截 free()

c++ - 我可以只使用固定数组而不是内存池吗?

c++ - 通过 destruct+move 构造的 move 分配安全吗?

c++ - 如何强制 gcc 链接未使用的静态库

c++ - C/C++ : "for" macro to track loops which are running many iterations

C++ 类型的解引用迭代器