c++ - 类构造函数中的数组

标签 c++

例如,我有一个带有构造函数的类,该构造函数以整数数组作为参数:

A(int* array) : m_array(array) {}

我可以这样使用它:

int array[] = { ... }
A a(array);

或者像这样:

int* array = new int[10];
A a(array);

如果对象然后使用它的数组,它必须(或可能不是?)在析构函数中删除它(如果它是动态的)。但他怎么知道这个数组的内存是动态分配的呢?

最佳答案

你无法知道它是否是动态分配的,因为毕竟 int* array 是一个 int 指针,而不是数组。你不妨通过:

int i;
A a(&i);

正如您所想象的,如果您尝试删除[]该数组,或者尝试访问 N > 0 的m_array[N],就会发生不好的事情。

所以你必须依赖调用者来做正确的事情;您无法验证或强制执行它。您所拥有的只是一个int 的地址。谁创建了该 int,或者如何或是否有更多 int 跟随它,将是未知的。

如果您想要更安全,请使用std::vector。这就是它的用途。

关于c++ - 类构造函数中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550450/

相关文章:

c++ - __typeof 和 typeof 有什么区别吗?

c++ - 钳位到 "easy"数字

c++ - 如何将所有指针从一个 vector 移动到另一个 vector ?

java - 在 Windows 7 上为 JNI_CreateJavaVM 链接到什么库?

c++ - 文件映射对象和文件对象可以互换使用吗?

c++ - 推送到线程池时如何返回 future

c++ - 在 Boost::Python 中通过引用传递

c++ - 在 C++ 中实现注册/注销模式

c++ - 与正在定义的类相同类型的静态 constexpr 成员

c++ - 在 cudaStreamSynchronize 之前我需要 cudaSetDevice 吗?