gpt4 book ai didi

c++ - vector 调用的构造函数的奇怪问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:19 24 4
gpt4 key购买 nike

vector< MyObject<MyType> > ObjectList(100, MyObject<MyType>(param1));

MyObject 在内部创建一个名为“storage”的成员,它是一个使用堆上的 MyType 数组。

但是使用上面的代码行,ObjectList 中的每个项目都有指向相同内存位置的“存储”(本质上共享存储)。

当我使用手动分配堆栈上的列表时,不会出现此问题

MyObject<MyType> ObjectList[100] = { MyObject<MyType>(param1), 
MyObject<MyType>(param1), ...};

当我用上面的行声明 MyObject 时,每个存储都有自己的内存位置。

最佳答案

But use the line of code above, every item in ObjectList has 'storage' pointing to the same memory location (essentially sharing the storage).

如果您已经为 MyObject(和 MyType 如果它也包含指针)编写了正确的复制构造函数,那么就不会发生这种情况,因为 ObjectList 使用您传递的内容的拷贝 进行初始化。

我所说的“正确”是指执行深度复制的复制构造器,而不是浅层复制!

看这个:

What is the difference between a deep copy and a shallow copy?

关于c++ - vector<T> 调用的构造函数的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905995/

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