Pointer to a Partially-Constructed Object

B

better_cs_now

Hello all,

Please consider the following code:

class Bar;

class Foo {
Bar *m_pBar;
public:
Foo(Bar *pBar): m_pBar(pBar) {}
};

class Bar {
Foo m_Foo;
public:
Bar(): m_Foo(this) {}
};

It would certainly be wrong for Foo::Foo() to dereference pBar since
the Bar object is still being constructed and therefore does not
exist. However, is it wrong to even cache off the pointer for later
use as shown?

Thanks,
Dave
 
R

Rolf Magnus

Hello all,

Please consider the following code:

class Bar;

class Foo {
Bar *m_pBar;
public:
Foo(Bar *pBar): m_pBar(pBar) {}
};

class Bar {
Foo m_Foo;
public:
Bar(): m_Foo(this) {}
};

It would certainly be wrong for Foo::Foo() to dereference pBar since
the Bar object is still being constructed and therefore does not
exist. However, is it wrong to even cache off the pointer for later
use as shown?

No. If you only store the pointer value, that's fine.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,900
Latest member
Nell636132

Latest Threads

Top