c-string和(int,double,float)之间的动态分配



我正在为c字符串创建一个动态分配的数组。当我需要调整数组大小时,我会使用strcpy、strlen和strcat来帮助完成这个过程。这让我想到,当我为c-string动态分配数组时,我不必为c-string数组声明和定义复制构造函数和赋值操作符。但是,如果我要为双精度或浮点数创建一个动态分配的数组,我就必须声明和定义一个复制构造函数来获得数组的深度副本,并声明和定义一个赋值操作符来允许别人复制一个实例。

我的问题是,因为strlen,strcpy和strcat是C语言中的预定义函数,它们会自动处理像深度拷贝这样的事情,并在动态数组中复制实例,或者定义和声明复制构造函数和赋值运算符会更聪明吗?

如果这太模糊,我可以详细说明。

c++有std::vector和std::string来自动处理这些事情。您似乎认为动态分配的字符数组会自动进行深度复制,但这是不正确的。动态分配数组的类型不会改变它们的复制/赋值行为;默认的复制/赋值提供浅拷贝。您要么需要定义复制构造函数和赋值操作符,要么只依赖STL更健壮的特性。

我的问题是,既然strlen、strcpy和strcat是预定义的c++语言中的函数,它们会自动处理比如深度复制和动态复制实例数组……?

那些是C函数,不是c++函数!不,它们不会自动为您执行深度复制。

最新更新