// CplusTest20161027.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#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;
// *ptr = *obj.ptr; // copy the value
//}
Line::~Line(void) {
cout << "Freeing memory!" << endl;
if (ptr)
{
delete ptr;
ptr = NULL;
}
}
int Line::getLength(void) {
return *ptr;
}
void display(Line obj) {
cout << "Length of line : " << obj.getLength() << endl;
}
// Main function for the program
int main() {
Line line(10);
display(line);
return 0;
}
in above code, I commented the copy constrcture to test what happened. and I found the pointer would be deleted twice so it is an exception. So I decide to check if the pointer should be deleted, by setting prt=NULL after it was delete. But still, ptr will be delete TWICE. Why? can somebody explain the logic to me? please help me figure out what is wrong? the output is: Normal constructor allocating ptr Length of line : 10 Freeing memory! Freeing memory!
with an exception on heap.