top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

Can one constructor of a class call another constructor of the same class to initialize the this object?

+4 votes
346 views

explain the scenario with example?

posted Dec 10, 2014 by Anwar

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

1 Answer

0 votes

Result: NO

Let's work an example

Suppose you want your constructor Foo::Foo(char) to call another constructor of the same class, say Foo::Foo(char,int), in order that Foo::Foo(char,int) would help initialize the this object. Unfortunately there's no way to do this in C++.

Some people do it anyway. Unfortunately it doesn't do what they want. For example, the line Foo(x, 0); does not call Foo::Foo(char,int) on the this object. Instead it calls Foo::Foo(char,int) to initialize a temporary, local object (not this), then it immediately destructs that temporary when control flows over the

class Foo {
public:
Foo(char x);
Foo(char x, int y);
...
};
Foo::Foo(char x) {
...
Foo(x, 0); // this line does NOT help initialize the this object!!
...
} You can sometimes combine two constructors via a default parameter:

class Foo {
public: Foo(char x, int y=0); // this line combines the two constructors
...
};
If that doesn't work, e.g., if there isn't an appropriate default parameter that combines the two constructors, sometimes you can share their common code in a private init() member function:

class Foo {
public:
Foo(char x);
Foo(char x, int y);
...
private:
void init(char x, int y);
};
Foo::Foo(char x)
{
init(x, int(x) + 7);
...
}
Foo::Foo(char x, int y)
{
init(x, y);
...
}
void Foo::init(char x, int y)
{
...
}
BTW do NOT try to achieve this via placement new. Some people think they can say new(this) Foo(x, int(x)+7) within the body of Foo::Foo(char). However that is bad, bad, bad. Please don't write me and tell me that it seems to work on your particular version of your particular compiler; it's bad. Constructors do a bunch of little magical things behind the scenes, but that bad technique steps on those partially constructed bits.

Just say no.

answer Dec 13, 2014 by Mohammed Hussain
Similar Questions
+6 votes
0 votes

How does compiler work internally to make sure constant object can access only constant member function ?

0 votes

We define copy constructor using
A(const A & obj)

Why reference (&) is needed?
Why we are not allowed to use.

A(const A obj)
...