gpt4 book ai didi

C++:关于复制构造函数的问题

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

我有一个类,我在其中使用 this 来初始化一个 void* 指针。但问题是,当我按值 传递该类的实例时,指针不会更改为堆栈上的新地址。因此,我想重写复制构造函数以使用 this 的新地址重新分配指针。但是我需要变量来调用父类(super class)构造函数,我通常通过构造函数参数获得它们,但我的复制构造函数中没有它们...

我希望我解释得很好......

所以问题是:我可以保留默认复制构造函数的过程,在其中添加重新分配指针的部分吗?或者有更好的选择吗?

谢谢

这是一些代码:

class GetsCopiedByValue : public SuperClass
{
GetsCopiedByValue(Type1 *t1, Type2 *t2, float var1, /* A lot of other things I need */) :
SuperClass(t1, t2), var1(var1)
{
t1->set_GetsCopiedByValue_Address(this); // ***
}
}

其他地方:

{
GetsCopiedByValue instance (t1, t2, 4.64, /* All the other things */);
SomeType *t = new SomeType(instance); // <-- here, it gets copied by value,
} // but the original "instance" goes (here) out of scope and the address
// I assigned (***) is not longer valid, so I have to
// reassign the address to the new address, after copying it.

最佳答案

不确定这是否有帮助,但您可以在您的复制构造函数中实际调用父类(super class)复制构造函数:

GetsCopiedByValue(GetsCopiedByValue const& other) :
SuperClass(other), var1(other.var1)
{
t1->set_GetsCopiedByValue_Address(this);
}

但我认为,即使您省略了这个基类构造函数调用,C++ 也会为您插入它。

关于C++:关于复制构造函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430942/

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