#include <iostream>
using namespace std;
class A{
int * p;
public:
A(){
cout << "Default Constructor" << endl;
p = new int[10]{0};
}
A(const A& obj){
cout << "Copy Constructor" << endl;
p = new int[10]{0};
for(int i=0;i<10;i++)
p[i] = obj.p[i];
}
A(A&& obj){
cout << "Move Constructor" << endl;
delete [] p;
p = obj.p;
obj.p = nullptr;
}
A& operator = (const A & obj){
cout << "Copy Assignment Operator " <<endl;
if(this == &obj)
return *this;
p = new int[10]{0};
for(int i = 0 ;i < 10;i++)
p[i] = obj.p[i];
return *this;
}
A& operator = (A&& obj){
cout << "Move Assignment Operator" <<endl;
if(this == &obj)
return *this;
delete [] p;
p = obj.p;
obj.p = nullptr;
return *this;
}
~A(){
cout << "Destructor " << endl;
delete [] p;
}
void setData(){
for(int i = 0 ; i < 10 ;i++)
p[i] = i*i;
}
void printData(){
for(int i=0;i<10;i++)
cout << p[i] << " ";
cout << endl;
}
};
int main()
{
A obj ;
obj.setData();
obj.printData();
A soj(std::move(obj));
soj.printData();
}
I am writing sample code and I am facing Following error , After checking through valgrind --track-origins=yes ./a.out
==1198431== Conditional jump or move depends on uninitialised value(s)
==1198431== at 0x1093BC: A::A(A&&) (in /home/pankaj/practice/PracticeC++Advanced/a.out)
==1198431== by 0x109233: main (in /home/alex/practice/PracticeC++Advanced/a.out)
==1198431== Uninitialised value was created by a stack allocation
==1198431== at 0x1091DA: main (in /home/alex/practice/PracticeC++Advanced/a.out)
How to Fixed the above error ?