复制构造函数中的 std::copy 错误
Error with std::copy in copy constructor
我正在编写自己的 vector
class 只是为了了解内存管理的工作原理。我从中调用 std::copy
的 class 中唯一的地方是在复制构造函数中。
vector::vector(const vector& v)
:sz{v.sz}, space{v.space}, elem{new double[sz]}
{
copy(v.elem, v.elem + v.sz, elem);
}
其中 sz(int) 是向量的大小,space(int) 是为向量保留的内存,elem(double*) 是指向元素的指针。
当我调用 std::copy
时出现以下错误。
Error C4996 'std::_Copy_impl': Function call with parameters that may be
unsafe - this call relies on the caller to check that the passed values are
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See
documentation on how to use Visual C++ 'Checked Iterators' Project2
c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2230
我是不是错过了什么,因为我没有传递正确的参数?
代码正确。显然你正在使用一些时髦的编译器选项将警告变成错误。警告是说 copy
的实现无法检查它是否没有复制到目标数组的末尾。但是调用代码(你的复制构造函数)已经检查过了,所以调用没有问题。
我正在编写自己的 vector
class 只是为了了解内存管理的工作原理。我从中调用 std::copy
的 class 中唯一的地方是在复制构造函数中。
vector::vector(const vector& v)
:sz{v.sz}, space{v.space}, elem{new double[sz]}
{
copy(v.elem, v.elem + v.sz, elem);
}
其中 sz(int) 是向量的大小,space(int) 是为向量保留的内存,elem(double*) 是指向元素的指针。
当我调用 std::copy
时出现以下错误。
Error C4996 'std::_Copy_impl': Function call with parameters that may be
unsafe - this call relies on the caller to check that the passed values are
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See
documentation on how to use Visual C++ 'Checked Iterators' Project2
c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2230
我是不是错过了什么,因为我没有传递正确的参数?
代码正确。显然你正在使用一些时髦的编译器选项将警告变成错误。警告是说 copy
的实现无法检查它是否没有复制到目标数组的末尾。但是调用代码(你的复制构造函数)已经检查过了,所以调用没有问题。