正在初始化定义和构造函数中的变量-已使用



我正在尝试学习C++和编程,因此我正在STL中实现一些数据结构。

至于我的vector版本,我有两个构造函数,其中一个允许您在内存中指定一个存储位置,如果您愿意的话。如果没有,我已经将内部数据的地址设置为nullptr。

我想知道这会如何表现。使用第一个构造函数,我假设m_data将被设置为nullptr,但在第二种情况下会发生什么?m_data是否首先设置为nullptr,然后在构造中被覆盖?是否有理由在定义中保留定义为nullptr,或者在这两种情况下我应该只使用初始值设定项列表?

这是代码:

template <typename T, size_t S = 0>
class custom::vector {
private:
T* m_data = nullptr;
size_t m_size;
size_t m_capacity;
T* m_future_data = nullptr;
size_t m_future_cap;
public:
// Constructors
vector() : m_size(S), m_capacity(S) {}
vector(T* destination, const size_t& capacity) : m_size(S) {
m_data = destination;
m_capacity = capacity;
}
// .... rest of class

这很棘手,所以请在您的特定情况下查看,因为T*是一个指针,而指针没有构造函数。如果您有一个类类型为的成员,您可以看到调用了哪个构造函数。

然后,您将看到成员被初始化一次(ctor,而不是赋值(。如果初始化项列表中有可用的初始化项,则使用该初始化项;如果初始化项中没有初始化项,那么使用成员定义中的初始化项。

至于是否应该保留m_data的默认值,我会说不。主要原因是应该有一个适当的类不变量,我怀疑不变量应该链接m_datam_size。但m_size在其定义中没有默认值——它可能是S。但你应该始终如一。

最新更新