<分区>
我正在尝试使用 initializer_list
来实例化一个类,但出现了连线错误。
当尝试使用以下方法创建 `ClassB`` 变量时:
ClassB b = { { 1, {} }, { 2, {} };
将发生内存访问冲突。但是,如果更改为:
ClassA a0, a1;
ClassB b = { { 1, a0 }, { 2, a1 } };
错误消失。
我尝试使用 VC 2013(没有更新 1)和 gcc-c++ 4.8.1 进行编译。使用 gcc-c++ 4.8.1 不会产生任何运行时错误。是VC的bug吗?
谁能帮忙确认一下?谢谢!
以下是SSCCE:
#include <iostream>
#include <initializer_list>
#include <map>
#include <vector>
#include <memory>
using namespace std;
struct ClassA {
struct Data {
vector<int> vs;
};
unique_ptr<Data> d;
ClassA() : d(new Data()) {}
ClassA(const ClassA& a) : ClassA() {
*d = *(a.d);
}
};
struct ClassB {
ClassB(initializer_list<pair<const int, ClassA> > v) { as = v; }
map<int, ClassA> as;
};
int main() {
ClassA a0, a1;
// ClassB b = { { 1, a0 }, { 2, a1 } }; // won't crash in VC
ClassB b = { { 1, {} }, { 2, {} } };
return 0;
}