何をしようとしているのか聞かないでください。これは簡単なテストであり、新しい配置に問題があるかどうかを確認することが唯一の目的です。
問題を見つけた、または何かを誤解しただけです。
#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 でビルドしています。