3

我一直在寻找答案,但仍然无法弄清楚。

抱歉,但我的工作太复杂,无法在此处复制示例代码。

我有一个函数,它获取一个指针作为参数;我使用它,但后来,我需要一种回调,我想在其中使用我的旧指针对象。

问题是,当调用此回调时,指针已被删除或释放。我的想法是在堆上复制指向对象,并在回调完成时释放它。但我在指针、复制构造函数和其他东西之间迷路了。解决方案可能很简单,但我被卡住了。

4

4 回答 4

5

如果你有一个T * p,那么你可以像这样创建一个新对象:

T x(*p);

或者,如果您必须(但认真地,不要!),动态分配的对象:

T * q = new T(*p);

不要使用第二种形式。您对此感到头疼的问题永无止境。

于 2012-11-02T17:58:36.930 回答
2

假设你有一个 typeT和一个指针T* ptr; 假设ptr当前是一个有效指针,那么T* ptr2 = new T(*ptr);应该调用 T 上的复制构造函数在堆上创建一个新指针。现在,这要求您的类型T具有正确编写的复制构造函数和析构函数等。

于 2012-11-02T17:59:42.007 回答
1

另一种方法:

MyObject* pointerFromOld;
...
MyObject newObject = *pointerFromOld;

在指针返回它指向的对象之前的星号(将地址的内容解释为对象),同时将该对象分配给 newObject 进行复制。

于 2017-01-31T16:49:20.877 回答
0

我刚刚发现了这个: C++ Idioms/Virtual Constructor

于 2012-11-05T14:14:05.440 回答