Сегодня при запуске проблемы с памятью в моем проекте с классом с использованием С++ 11 initializer_list. Система сигнализирует о проблеме с памятью: "Выражение _BLOCK_TYPE_IS_VALID (pHead- > nBlockUse) в dbgdel.cpp. Я упростил код до простого примера, он больше не выдает выражение, но проблема становится очевидной из вывода отладки. код правильный, также он работает с g++.
#include <functional>
#include <memory>
#include <string>
#include <iostream>
#include <vector>
#include <map>
#include <sstream>
#include <initializer_list>
using namespace std;
class B {
public:
char data[256];
B(const string& x) {
cout << "Init " << this << endl;
}
B(const B& b) {
cout << "Copy " << this << endl;
}
~B() {
cout << "Deleting b " << this << endl;
}
};
class C {
public:
vector<B> bs;
C(initializer_list<B> bb) {
for(auto& b : bb) {
bs.push_back(b);
}
}
};
int main(int argc, char** argv) {
C bb { B("foo"), B("bar") };
return 0;
}
Вывод:
Init 00B7FAE8 Init 00B7FBE8 Copy 00E108A0 Copy 00E10AE8 (?????) Deleting b 00E108A0 Copy 00E10BE8 Deleting b 00B7FBE8 Deleting b 00B7FAE8 Deleting b 00B7FAE8 (Deleted twice!)
Какую ошибку я делаю здесь или это не должно работать?