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

时间:2012-11-02 17:57:34

标签: c++ pointers syntax copy-constructor auto-ptr

我已经找到了答案,但仍然无法弄明白。

很抱歉,但我的工作太复杂了,无法复制示例代码。

我有一个函数,它将指针作为参数;我使用它,但后来,我需要一种回调,我想使用我的旧尖头物体。

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

4 个答案:

答案 0 :(得分:4)

如果您有T * p,那么您可以创建一个新对象:

T x(*p);

或者,如果你必须(但严重的话,不要!),动态分配的对象:

T * q = new T(*p);

不要使用第二种形式。你正在邀请的那个头痛是无止境的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

另一种方法:

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

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