Okay, consider the following classes:
class Object
{
public:
// Constructor
Object() :
[Initialization List]
{
...
}
...
};
class Container
{
public:
Object A;
Object B;
....
Container() :
[Initialization List]
{
}
};
I’d like to provide [access to Container and it’s members] to the Objects.
My first thought was to somehow pass a reference to the current Container object to the constructors of the Objects. But I can’t figure out how to do this.
I’ve messed around with “this”, but I’m not getting anything that works. I tried something like this:
class Object
{
public:
Container& c
// Constructor
Object(Container& c_) :
c(c_)
{
...
}
...
};
class Container
{
public:
Object A;
Object B;
....
Container() :
A(Object(this))
B(Object(this))
{
}
};
My eventual goal is to be able to access Object B from inside a member method of Object A.
Does anyone have any insight on how to get closer to what I’m looking for?
Thanks!
It is not UB or bad, necessarily, to use
thisin an initializer list, although care is needed, and your code is perfectly valid with minor modification.thisis a pointer, you wanted a reference, and a simple de-reference will do the trick. This is perfectly legal and defined code. What’s not allowed is to access any member data or functions through the pointer, because those member data or functions simply may not exist yet until the init list is finished. But it definitely is allowed to take a pointer or reference to an object during it’s initializer list and pass it around.