我正在使用 std::array 替换一些我正在升级到 C++ 的 C 代码中的“指针和计数”调用方法。创建和使用 std::array 没有问题,但在销毁时它将对所有元素调用析构函数。
但是我的数组经常不是完全满的,导致对空元素的析构函数调用。通常不是问题,因为它们将使用默认构造函数构造,但我只想通过递减大小计数来删除一个元素,这意味着在数组中留下一个“已使用”元素,这会导致销毁问题。
通过调用其元素的析构函数来确保仅销毁数组的一部分的最佳方法是什么?
对不起,我没说清楚。我创建了一个包含 std::array 和 size int 的类。
class MyArray {
std::array< myclass, N > m_array;
unsigned int m_size;
};
显然,数组不会总是满的。我需要一个只会破坏 m_array 的第一个 m_size 元素的析构函数。
这行得通吗?
MyArray::~MyArray() {
for (unsigned int s = 0; s < m_size; ++s) {
m_array[s].~myclass();
}
}
我担心的是析构函数在 myclass 上被调用了两次。
最佳答案
那是完全不可能的。 std::array
只是原始数组的包装器。数组没有“满”或“空”的概念。元素同样就在那里,它们不能被“移除”,它们会被破坏。
您正在与所选容器类型的主要特征作斗争。您必须恢复选择。必须有无数其他方法来实现您需要的行为,例如使用 std::vector
。
关于c++ - 使 std::array 仅在数组的一部分上调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747345/