I have this code. I'm not that proficient in C++, so I'm going to ask several questions:
#include <iostream>
using namespace std;
class Line {
   public:
      int getLength( void );
      Line( int len );             // simple constructor
      Line( const Line &obj);  // copy constructor
      ~Line();                     // destructor
   private:
      int *ptr;
};
// Member functions definitions including constructor
Line::Line(int len) {
   cout << "Normal constructor allocating ptr" << endl;
   // allocate memory for the pointer;
   ptr = new int;
   *ptr = len;
}
Line::Line(const Line &obj) {
   cout << "Copy constructor allocating ptr." << endl;
   ptr = new int;
   cout<<&obj<<endl;
   *ptr = *obj.ptr; // copy the value
}
Line::~Line(void) {
   cout << "Freeing memory!" << endl;
   delete ptr;
}
int Line::getLength( void ) {
   return *ptr;
}
void display(Line obj) {
   cout << "Length of line : " << obj.getLength() <<endl;
}
// Main function for the program
int main() {
   int a = 10;
   cout<<&a<<endl;
   Line line(a);
   display(line);
   return 0;
}
- Here I don't see where we call copy contructor.
- Destructor is being called twice. Where is the second object is being created?
- Line::Line(const Line &obj)receives address of- aas a parameter? I guess not. But why?- aby itself is not an instance of Line, so why function accepts that?
- What would be the difference between Line::Line(const Line &obj)andLine::Line(const Line obj)
- And could you please explain this *ptr = *obj.ptr;. From here i know only lhs, which dereferences ptr (aka sets value of an object). But I didn't get what's in rhs?
I'd appreciate if you explain with less technical terms and more examples, for clarity
Above code outputs this:
0x7fff692196a4
Normal constructor allocating ptr
Copy constructor allocating ptr.
0x7fff69219698
Length of line : 10
Freeing memory!
Freeing memory!
 
     
    