从现有指针C 创建一个新对象



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

对不起,但是我的工作太复杂了,无法在此处复制示例代码。

我有一个函数,该函数将指针作为参数;我使用它,但是以后,我需要一种回调,我想在其中使用旧的尖头对象。

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

如果您有T * p,则可以制作一个新对象:

T x(*p);

或,如果您必须(但请严重,不要!),一个动态分配的对象:

T * q = new T(*p);

不要使用第二表。您诱人的头痛没有结局。

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

另一种做法的方法:

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

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

我刚刚找到了这个:C 成语/虚拟构造函数

相关内容

最新更新