これを行うと、このエラーが発生します
実行時チェックの失敗 #0 - ESP の値が関数呼び出しで適切に保存されませんでした。これは通常、ある呼び出し規約で宣言された関数を、別の呼び出し規約で宣言された関数ポインターで呼び出した結果です。
呼び出すときdutyStack[0]();
。しかし、追加dutyStack.reserve(10);
した場合、またはベクトルに要素が 1 つしかない場合、エラーは発生しません。ベクトルのサイズを変更するときに要素をコピーしているときに何かが起こっていると思われますが、実際にはわかりません。
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
class Class1
{
public:
void duty1(){cout<<"duty1";}
void duty2(){cout<<"duty2";}
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<tr1::function<void()>> dutyStack;
Class1 myclass;
dutyStack.push_back( tr1::bind(&Class1::duty1, myclass) );
dutyStack.push_back( tr1::bind(&Class1::duty2, myclass) );
dutyStack[0]();
dutyStack.erase(dutyStack.begin());
}
私はビジュアルスタジオ2008、Windows 7の下にいます。