当我尝试动态创建(boost)位集的2d向量时,我似乎迷路了。
我的代码:
class Configuration
{
vector< vector<dynamic_bitset<> > > configset;
Configuration(unsigned groups, unsigned players, unsigned weeks){
//allocation on heap, this works
vector< vector<dynamic_bitset<> > > configset(weeks, vector<dynamic_bitset<> >(groups, dynamic_bitset<>(players)));
//this does not work, how to create this dynamically, with new?
configset = new vector< vector<dynamic_bitset<> > > (weeks, new vector<dynamic_bitset<> >(groups, new dynamic_bitset<>(players)));
}
};
如何使用新运算符初始化属性 configset ?感谢。
答案 0 :(得分:3)
因为它是configset被分配为Configuration
类的一部分。它将在内部调整大小以适合您的需要,但在销毁配置时它将被销毁。应该工作得很好,除非你真的需要一个指针。如果这适用于您,只需使用resize
调用替换分配,使其成为您需要的任何形状(例如:configset.resize(weeks, vector<dynamic_bitset>(groups, dynamic_bitset(players)))
)。在大多数情况下,这应该可以正常工作。
如果要显式分配它,则需要存储指针。像这样定义configset:
vector< vector<dynamic_bitset<> > > *configset;
您的大多数代码都可以使用。确保在析构函数中删除它。
更好的方法是使用unique_ptr(或其他一些智能指针),如下所示:
unique_ptr<vector<vector<dynamic_bitset<>>>> configset;
....
configset.reset(new vector....);
这种方式是动态分配的,您可以将其视为指针,但不会忘记将其删除。
如果您需要将它们一直动态分配,您还需要将其应用于内部结构。那是
vector<vector<dynamic_bitset<>*>*>* configset;
or
unique_ptr<vector<unique_ptr<vector<unique_ptr<dynamic_bitset<>>>>>> configset;
最后,您的分配只会创建一个dynamic_bitset<>
和一个vector<dynamic_bitset<>>
,并将指针复制到所有位置。这可能不是你想要的。删除指针(这不是java)或者有一个循环来正确初始化它。