#include <iostream>
using namespace std;
class classA
{
public:
classA() {
std::cout<<"Construct InstA At:"<<this<<std::endl;
}
classA(const classA& a){
std::cout<<"Construct InstA At:"<<this<<" With A At "<<&a<<std::endl;
}
classA & operator=(const classA& a) {
std::cout<<"Copy InstA At:"<<&a<<" To A At "<<this<<std::endl;
return *this;
}
~classA(){
std::cout<<"Destruct InstA At:"<<this<<std::endl;
}
};
class classB
{
public:
classA PropertOfInstanceA;
classA* PropertOfInstanceAPointer;
classB() {
std::cout<<"Construct InstB At:"<<this<<std::endl;
}
classB(const classB& b){
this->PropertOfInstanceA = b.PropertOfInstanceA;
this->PropertOfInstanceAPointer = b.PropertOfInstanceAPointer;
std::cout<<"Construct InstB At:"<<this<<" With B At"<<&b<<std::endl;
}
classB & operator=(const classB& b) {
this->PropertOfInstanceA = b.PropertOfInstanceA;
this->PropertOfInstanceAPointer = b.PropertOfInstanceAPointer;
std::cout<<"Copy InstB At:"<<&b<<" To B At "<<this<<std::endl;
return *this;
}
~classB(){
std::cout<<"Destruct InstB At:"<<this<<std::endl;
}
};
classA createA()
{
classA instanceA;
return instanceA;
};
classB* createInstBPtrWithInstA(classA InstA)
{
classB* instanceBPointer = new classB();
instanceBPointer->PropertOfInstanceA = InstA;
return instanceBPointer;
}
int main() {
// your code goes here
classA InstA;
classB* InstBPtrWithInstA = createInstBPtrWithInstA(InstA);
return 0;
}