【发布时间】:2013-09-04 03:43:43
【问题描述】:
我知道有更好的选择,例如 std::vector 或 std::array 等。在我的情况下,我必须使用指向动态分配数组的指针,因为我正在学习复制和交换习语和它涉及创建我自己的资源管理类。
假设我有一个资源句柄类的以下复制构造函数:
A(const A& other) : size(other.size), arr(size ? new int[size]() : nullptr) {
std::copy(other.arr, other.arr + size, arr);
}
它不能在 Visual Studio(2013 Preview 和 2012 Express)中编译。我得到的错误是:
是否可以以另一种方式使用std::copy,以便编译器停止对我大喊大叫?或者使用简单的循环手动复制数组的内容是一个更好的主意,比如
for (int i = 0; i < size; i++)
arr[i] = other.arr[i];
附:我不想使用任何黑客/宏来禁用警告等。
【问题讨论】:
-
它大喊大叫,因为如果大小很大,可能会出现缓冲区溢出。如果可能的话,您的用法可能会清楚地表明这一点。您可以仅禁用此文件的警告。 stackoverflow.com/questions/903064/…
-
@JesseGood 在这个例子中是一个简单的
int* -
为什么不使用
std::vector<int>? -
如果 Visual Studio 拒绝编译符合 C++ 的代码,那么它就不是 C++ 编译器。换句话说,您的问题是关于 Visual Studio,而不是关于 C++。
-
@Nemo:你在草率下结论。 c4996 是一个警告。如果触发错误,则 OP 自己启用了“将警告视为错误”标志。
标签: c++ arrays visual-studio pointers visual-studio-2013