我正在为长期内存管理实现一个 super 简单的容器,该容器将包含在一个数组中。
我想知道,下面这两种方法的实际含义是什么?
template<class T, size_t C>
class Container
{
public:
T objects[C];
};
和:
template<class T>
class Container
{
public:
Container(size_t cap)
{
this->objects = new T[cap];
}
~Container()
{
delete[] this->objects;
}
T* objects;
};
请记住,这些只是最小的例子,我没有考虑存储容量、虚拟大小等内容。
最佳答案
如果在编译时知道容器的大小,就像在第一个例子中一样,你最好使用 std::array .例如:
template<class T, size_t C>
class Container
{
public:
std::array<T, C> objects;
};
这具有重要的优点:
Container::objects
的迭代器,因此您可以使用 algorithm library 的所有例程. 第二个例子有一些重要的缺点:
new
会发生什么在构造函数中抛出?你必须妥善处理这个案子。 virtual
析构函数,除非您确定没有人从该类派生,请参阅 here . 您可以通过使用 std::vector 来避免所有这些问题。 .
关于c++ - 类成员中 T[n] 与 T* 样式数组的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59406838/