我一直在寻找答案,但仍然无法弄清楚。
对不起,但是我的工作太复杂了,无法在此处复制示例代码。
我有一个函数,该函数将指针作为参数;我使用它,但是以后,我需要一种回调,我想在其中使用旧的尖头对象。
问题是,当调用此回调时,指针已经被删除或释放。我的想法是在堆上复制尖头对象,并在回调完成后将其释放。但是我在指针,复制构造函数和其他东西之间迷路了。解决方案可能很简单,但是我被卡住了。
如果您有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 成语/虚拟构造函数