c++ - 稍后如何实例化数组的大小?

标签 c++

假设我有一个名为

的基类
Class Base {
public:
    std::string array[];
};

字符串数组的大小直到另一个类扩展它才确定,这样做的正确语法是什么?

EG,稍后在派生类中

Derived::Derived() {
    array[] = new array[40];
}

最佳答案

如果您想使用 C 风格的数组,大小必须是固定的并且在编译时已知。即使在那种情况下,您也可以使用更安全、零开销的 std::array<>包装器代替。

如果您的容器的大小在编译时未知,那么最好使用std::vector (或 std::deque 在某些情况下,根据您在内存分配方面的要求)并避免通过原始指针进行手动内存管理,new[]delete[] :

#include <string> // For std::string
#include <vector> // For std::vector

class Base {
public:
    std::vector<std::string> myVector;
};

此外,此设计不需要在 Derived 的构造函数(和析构函数)中进行任何专门工作.如果这一切都是由 Derived 完成的的默认构造函数是分配数组,现在您可以完全避免显式定义默认构造函数,并让编译器为您隐式生成一个 - 析构函数也是如此。

此外,我不鼓励您使用标准容器类的名称(如 array )作为变量的名称。类似于 myArray (或 myVector ,如我上面的示例)是更合适的选择。

关于c++ - 稍后如何实例化数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15744096/

相关文章:

c++ - 如何在 C++ 中递归反转负整数?

c++ - new char[n] 和 new (char[n]) 的区别

c++ - Linux C++ ._MyFirst ._MyLast vector 等效

c++ - 提取共享内存的大小

c++ - Windows C++ 分析器(基于控制台的网络应用程序)

c++ - 以未知顺序执行函数的最有效方法

c++ - 通用谓词作为参数的默认值-续

c++ - 折叠表达式 () 在哪里?

c++ - 在 C++0x 标准中使用/定义了什么样的 "Traits"

c++ - 如何在大数字中插入空格以使其更具可读性?