以下内存分配是否有用?

时间:2014-01-28 22:44:02

标签: c++ pointers new-operator

我在以下链接中找到了这段代码

http://www.tutorialspoint.com/cplusplus/cpp_copy_constructor.htm

Line::Line(const Line &obj)
{
cout << "Copy constructor allocating ptr." << endl;
ptr = new int;
*ptr = *obj.ptr; // copy the value
}

其中Line定义为:

class Line
{
public:
  int getLength( void );
  Line( int len );             // simple constructor
  Line( const Line &obj);  // copy constructor
  ~Line();                     // destructor

private:
  int *ptr;
 };

请帮助我理解..在Copy构造函数中为* ptr分配内存有什么意义?通过将它分配给* obj.ptr,基本上它们都指向内存中的相同位置?我为什么要在这里使用new,如果它只是执行浅拷贝,那就是复制预期变量的指针地址?

2 个答案:

答案 0 :(得分:2)

这是制作深拷贝的方法。指针不指向相同的位置,因为您动态地分配了ptr(因此它具有自己的新位置)。之后,通过取消引用它们来复制指针的值。

答案 1 :(得分:1)

每个Line实例都有自己动态分配的int。复制构造函数正在分配一个新的int,然后复制指向的int的value,它不会复制指针本身。