放置新运算符
Placement New Operator
#include<iostream>
using namespace std;
int main() {
int buf[2];
int *p=new (buf) int(2);
int *q=new (buf+1) int(6);
for(int i=0;i<2;i++)
cout<<buf[i]<<" ";
return 0;
}
我正在尝试使用以下示例放置新运算符。对于上面的代码,我得到的输出为:
trial.cpp:7:20: warning: placement new constructing an object of type 'int' and size '4' in a region of type 'int [2]' and size '0' [-Wplacement-new=]
int *q=new (buf+1) int(6);
2 6
为什么我会收到 *q 的警告?根据我的理解,p 和 q 是指向 buf 数组中 2 个不同块的 2 个指针。如有不妥请指正
这是影响版本 8 到 10 并在 11 中修复的 GCC 错误,请参阅 bug report。
代码没问题,警告一个false-positive。
#include<iostream>
using namespace std;
int main() {
int buf[2];
int *p=new (buf) int(2);
int *q=new (buf+1) int(6);
for(int i=0;i<2;i++)
cout<<buf[i]<<" ";
return 0;
}
我正在尝试使用以下示例放置新运算符。对于上面的代码,我得到的输出为:
trial.cpp:7:20: warning: placement new constructing an object of type 'int' and size '4' in a region of type 'int [2]' and size '0' [-Wplacement-new=]
int *q=new (buf+1) int(6);
2 6
为什么我会收到 *q 的警告?根据我的理解,p 和 q 是指向 buf 数组中 2 个不同块的 2 个指针。如有不妥请指正
这是影响版本 8 到 10 并在 11 中修复的 GCC 错误,请参阅 bug report。
代码没问题,警告一个false-positive。