我在以下链接中找到了这段代码
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,如果它只是执行浅拷贝,那就是复制预期变量的指针地址?
答案 0 :(得分:2)
这是制作深拷贝的方法。指针不指向相同的位置,因为您动态地分配了ptr(因此它具有自己的新位置)。之后,通过取消引用它们来复制指针的值。
答案 1 :(得分:1)
每个Line
实例都有自己动态分配的int
。复制构造函数正在分配一个新的int
,然后复制指向的int的value
,它不会复制指针本身。