![](/img/trans.png)
[英]C++ - Will deleting a vector of structs that contain vectors cause memory leaks?
[英]Delete vector of vectors that contain structs
C ++新手在这里。 我正在创建一个有限的哈希图,并将结构存储在向量中的向量中。 即:
struct bucket{
V value;
std::time_t time;
};
std::vector<std::vector<bucket>> limmap;
template <typename K, typename V>
ece2400::limited_hash_map<K,V>::limited_hash_map::limited_hash_map(std::size_t num_buckets , std::size_t bucket_size){
for(int i = 0; i < num_buckets; i++){
std::vector<bucket> temp(bucket_size);
limmap.push_back(temp);
}
}
谢谢!
首先,我不知道函数头是否正确,但是考虑到您的问题,让我们假设它是正确的也没有关系。
1.用数组代替向量会更好吗?
如果您指的是C样式的数组,那么我建议您不要使用它们。 它是C ++,使用标准库。 当然,C风格的数组速度更快,但更容易出错。 另一方面,如果您的意思是std::array
,那么答案是否定的(有点)。 要创建std::array
对象,描述数组将容纳的元素数量的参数必须是已知的编译时( constexpr
)。 这可能不适用于您的函数,因为您可以这样调用它:
int bucket_size;
std::cin >> bucket_size; // value not known at compile-time
limited_hash_map(num_buckets, bucket_size);
只需坚持使用std::vector
,就可以了:)
2.我将如何创建析构函数?
不用了 bucket
不会在构造函数中分配任何资源,因此您无需释放任何内容。 最终,向量将被销毁,并且当它们被破坏时,它们将销毁它们持有的所有对象,在您的情况下是bucket
对象。 由于它们不需要任何显式的析构函数,因此将自动销毁它们,而不会出现任何问题。
希望这可以帮助 :)
vector
很好地照顾自己。 只要V
符合零,三或五的规则,您就不需要在析构函数中做任何事情。 这可能允许ece2400::limited_hash_map
利用零规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.