gpt4 book ai didi

c++ - 如果类成员是 vector ,我们是否应该显式地编写一个复制构造函数?

转载 作者:可可西里 更新时间:2023-11-01 18:11:08 25 4
gpt4 key购买 nike

struct myType {
vector<char*> ls;
};

这里 ls 持有指向 char 的指针。如果未提供 myType 的用户定义复制构造函数,myType 的默认复制构造函数是否会执行 ls 的深层复制?

最佳答案

Here ls is holding pointer to char. If copy constructor is not provided, will default copy constructor do the deep copy?

默认的复制构造函数将复制所有成员——即调用它们各自的复制构造函数。1 所以是的,std::vector (就 C++ 而言没有什么特别之处)将被正式复制。

然而,char*指向的内存 vector 中的元素当然不会,因为 C++ 不知道也不关心指针指向什么。

但这里的解决方案不是提供自定义复制构造函数。它是使用数据结构而不是原始指针(char*)。而这恰好是 std::string (或 std::vector<char> 取决于意图)。


1 这样就创建了一个复制操作的传递闭包——这就是深度复制的一般实现方式,当然,复制操作的实现者总是可以突破

关于c++ - 如果类成员是 vector ,我们是否应该显式地编写一个复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com