不要问我要做什么,这只是一个快速测试,它的唯一目的是查看放置新位置是否有问题。
我发现了一个问题,或者我只是误解了一些东西。
#include <vector>
using namespace std;
#define WORKS
int main(int argc, char** argv) {
vector<int>* pp = (vector<int>*)malloc(sizeof(vector<int>)*20);
#ifdef WORKS
for(int i = 0; i < 20; ++i)
new (pp+i) vector<int>;
#else
new (pp) vector<int>[20];
#endif
for(int i = 0; i < 20; ++i)
pp[i].~vector<int>();
}
当您删除“#define WORKS”时,它会给您带来访问冲突,例如
for(int i = 0; i < 20; ++i)
new (pp+i) vector<int>;
效果很好,不同于
new (pp) vector<int>[20];
这是在销毁阶段引发异常的原因。这里发生了什么?我正在使用 Windows XP 并使用 VC++ Express 2010 进行构建。