假设我有一个名为
的基类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/