This code fails at runtime in the copy constructor.
But the compiler (MSVS2008) issues no warnings.
Could you explain (preferably cite the standard) whether this code is illegal or what?
I understand that A a = a; should never be written at the first place, but I am looking for a theoretical background.
class A
{
public:
A()
:p(new int)
{
}
A(const A& rv)
{
p = new int(*rv.p);
}
~A()
{
delete p;
}
private:
int *p;
};
int main()
{
A a = a;
}
In the init method, self refers to the newly created object; in other class methods, it refers to the instance whose method was called. Python doesn't force you on using "self". You can give it any name you want. But remember the first argument in a method definition is a reference to the object.
An initializer is a special type of function that is used to create an object of a class or struct. In Swift, we use the init() method to create an initializer. For example, class Wall { ... // create an initializer init() { // perform initialization ... } }
Your code is not calling the standard constructor but the copy constructor, so you are accessing an uninitialized pointer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With