Untitled

mail@pastecode.io avatarunknown
c_cpp
a month ago
1.2 kB
1
Indexable
Never
#include <iostream>

using namespace std;

//THIS CODE WILL RESULT IN HEAP CORRUPTION!!!! TWO OBJECTS ARE POINTING TO THE SAME AREA, AND ONE OF THEM IS
//RELASING THE MEMORY WHICH STILL IS BEEING REFERED BY OTHER ONE


class Shallow {
private:
    int *data;  //ALLWAYS USE DEEP COPY WHEN HAVING RAW C++ POINTERS!!!
public: 
    void set_data_value(int d){*data =d;}
    int get_data_value(){return *data;}
    //Constructor
    Shallow(int d);
    //Copy constructor
    Shallow(const Shallow &source);
    //Destructor
    ~Shallow();
};

Shallow::Shallow(int d){
    cout << "Constructor - creating an object" << endl;
    data = new int;
    *data = d;
}

Shallow::Shallow(const Shallow &source)
    : data(source.data){
        cout << "Copy constructor - shallow copy" << endl;
    }
    
Shallow::~Shallow(){
    delete data;
    cout << "Destructor freeing data" << endl;
}

void display_shallow(Shallow s){
    cout << s.get_data_value() << endl;
}

int main() {
    
    
    Shallow obj1{100};
    display_shallow(obj1);
    
    Shallow obj2{obj1};
    obj2.set_data_value(1000);

    return 0;
}