【问题标题】:Dynamic Allocation between c-strings and (ints,doubles,floats)c-strings 和 (ints,doubles,floats) 之间的动态分配
【发布时间】:2014-08-03 19:36:34
【问题描述】:

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

我的问题是,由于 strlen、strcpy 和 strcat 是 C 语言中的预定义函数,它们是否会自动处理诸如深拷贝和在动态数组中复制实例之类的事情,或者定义和声明复制构造函数会更聪明吗?和赋值运算符?

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

【问题讨论】:

    标签: c++ arrays memory-management dynamic


    【解决方案1】:

    C++ 有 std::vector 和 std::string 可以自动处理这些事情。您似乎认为动态分配的字符数组会自动被深度复制,但这是不正确的。动态分配数组的类型不会改变它们的复制/分配行为;默认副本/分配提供浅拷贝。您要么需要定义复制构造函数和赋值运算符,要么只依赖 STL 更强大的功能。

    【讨论】:

    • 我很抱歉我应该提到我在没有使用 std::vector 和 std::string 的情况下制作了我的数组。好的,我知道默认的复制/赋值提供浅拷贝,而 strcpy 不会进行深拷贝,但是即使使用这些预定义的函数来制作复制构造函数和赋值运算符,它仍然很聪明,对吗?
    • 感谢您的回复!
    【解决方案2】:

    我的问题是因为 strlen、strcpy 和 strcat 是预定义的 C++ 语言中的函数是否会自动处理 诸如深拷贝和动态复制实例之类的东西 数组...?

    这些是 C 函数,而不是 C++ 函数!不,它们不会自动为您执行深层复制。

    【讨论】:

    • 你说得对,它们是 C 函数,我比这更清楚。我道歉。我想我只是无法理解如何在不定义复制构造函数或赋值运算符的情况下摆脱困境。浅拷贝怎么够?
    • C++ 没有“深”和“浅”副本。它只有副本,可以执行相关的复制构造函数(和复制赋值运算符)所说的任何事情。如果您编写复制构造函数来执行深复制,则该类型的所有副本都将是“深”的。
    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2018-09-19
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多