【发布时间】:2010-08-07 15:24:58
【问题描述】:
我有一个类,我使用this 来初始化void* 指针。但问题是,当我按值传递该类的实例时,指针不会更改为堆栈上的新地址。所以,我想重写复制构造函数,用this的新地址重新分配指针。但是我需要变量来调用超类构造函数,我通常通过构造函数参数获得,但我的复制构造函数中没有它们......
希望我解释清楚...
所以问题是:我可以保留默认复制构造函数的过程,在其中添加重新分配指针的部分吗?还是有更好的选择?
谢谢
这是一段代码:
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.
【问题讨论】:
-
你能发布一个代码示例吗?你的代码现在是什么样子的?
-
请贴一些代码。如果你使用的是 void *,你很可能做错了。
-
“我有一个类,我用它来初始化一个 void* 指针。”如果您提供代码会很好。无论如何,你为什么还需要 void*?
-
“但问题是,当我通过值传递该类的实例时,指针不会更改为堆栈上的新地址”......我很确定我不明白什么你在这里说...
-
好的,我会改写一下 - 请发布一些相关且真实的代码。
标签: c++ memory-management copy-constructor