sizeof(T)被解释为两个参数

时间:2018-03-26 18:46:03

标签: c++ c++17

error: no matching function for call to 'operator new(sizetype, long long unsigned int, long long unsigned int*&)'
 new(sizeof(T), tmp) T{std::move(buffer[i])};

我收到此错误,导致我认为sizeof(T)被解释为sizetype, T。为什么会发生这种情况,我该如何解决?

tmp属于T*类型,新运算符由#include <new>定义,我不会在任何地方定义逗号运算符。当我用Google搜索这个错误时,我发现的唯一类似事件是重新定义新运算符的调试模式,但事实并非如此。

1 个答案:

答案 0 :(得分:4)

您似乎正在尝试编写新的贴图,但是您传递的参数太多了。当通过operator new表达式调用new时,第一个参数始终设置为新建类型的大小。因此,您的代码转换为对

的调用
operator new(size_t, size_t, T*)

语言提供的第一个size_tsizeof(T),第二个是您的表达式提供的sizeof(T),第三个是指针。

placement new的正常语法是:

new (tmp) T{std::move(buffer[i])};