【问题标题】:C++ copy constructor by pointerC++ 通过指针复制构造函数
【发布时间】:2013-05-18 13:49:13
【问题描述】:

您好,我想创建一个新的类变量,它是一个指针,并通过复制构造函数对其进行初始化。虽然我知道复制构造函数是如何通过引用工作的,但我不知道该怎么做。你能帮助我吗? 例如我有这个定义:

class A{
public:
 int a;
private:
};

在另一个代码段中,我执行以下操作:

A *object= new A;
A->a=10;

A *newobject= new A(*object);

但我遇到了分段错误。你能帮助我吗? 我也试过了:

 A *newobject= new A(&(*object));

但它也不起作用。

【问题讨论】:

  • 请提交完整的编译样本。 Foo vs A? A.a vs object->a?
  • Works fine 如果您删除了明显的错误。重要的问题是你为什么要这样做?
  • 为了使队列不使用 STL 完全动态

标签: copy-constructor pass-by-pointer


【解决方案1】:

您的示例中的这些行甚至不应该编译:

A *object= new A;
A.a=10;

你的意思是

Foo *object = new Foo;
object->a = 10;

对吗?

编辑添加:

当您尝试@Alok Save 的the code posted 时会发生什么?

【讨论】:

  • 是的,我写的很匆忙!问题就在下面!
【解决方案2】:

通过这种简单的示例,以下使用默认的按位复制构造函数可以正常工作。

简单的类看起来像

class Bclass {
public:
    int iValue;
};

使用复制构造函数的代码如下:

Bclass *pObject = new Bclass;
pObject->iValue = 10;

Bclass *pObject2 = new Bclass (*pObject);

使用 Microsoft Visual Studio 2005,上述工作正常。

另见Implementing a Copy Constructor

另见Copy constructor for pointers to objects

【讨论】:

    【解决方案3】:

    由于类名是 Foo 而不是 A,所以应该创建一个 Foo 对象。

    class Foo{
      public:
      int a;
      private:
    }; 
    
     Foo *object= new Foo;
     object->a=10;
    

    现在由于 object 是指向类 Foo 的指针,所以应该使用 -> 运算符。

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 2016-04-08
      • 2010-10-21
      • 2011-02-09
      相关资源
      最近更新 更多