reference to pointer used in ctor (using 'this' in ctor)

A

Anonymous

template<class T>
class A
{
public:
A() {
T * object = new T(this); //passing instance as parent of nested class
m_obj.push_back(object);
}

~A() {
for (std::vector<T>::iterator it= m_obj.begin();
it != m_obj.end(); it++) delete *it ;
}

private:
std::vector<T*> m_objs ;
};

class B
{
public:
friend class A;
~B(){};

private:
B(A* parent):m_parent(parent){}

A* m_parent ;
};


class C
{
public:
friend class A;
~C(){};

private:
B(A*& parent):m_parent(parent){}

A* m_parent ;
};


int main( int argc, char* argv[])
{
A<B> ab ; // Ok
A<C> ac ; // Croaks here ...
};


Class A instanstiated with B compiles ok, but when instantiated with
class C (that accepts a *&), I get the error message - cannot convert
parameter 1 from A const* to A* - why is that ?

Why is a reference to a ptr being passed as a const ptr ?

If 'this' is a const ptr during construction (I doubt this assertion
very much), then why is it ok to use as a non-const pointer in class B?
 
A

Anonymous

Correction in the sample code I sent:

class C
{
public:
friend class A;
~C(){};

private:
C(A*& parent):m_parent(parent){}

A* m_parent ;
};

BTW, that typo was (OBVIOUSLY), NOT the reason for the error message I
reported getting earlier.
 
V

Victor Bazarov

Anonymous said:
[..]
class C
{
public:
friend class A;
~C(){};

private:
B(A*& parent):m_parent(parent){}

I am sure you meant

C(A* const& parent) : m_parent(parent) {}
A* m_parent ;
};


int main( int argc, char* argv[])
{
A<B> ab ; // Ok
A<C> ac ; // Croaks here ...
};


Class A instanstiated with B compiles ok, but when instantiated with
class C (that accepts a *&), I get the error message - cannot convert
parameter 1 from A const* to A* - why is that ?

Why is a reference to a ptr being passed as a const ptr ?

If 'this' is a const ptr during construction (I doubt this assertion
very much), then why is it ok to use as a non-const pointer in class
B?

'this' cannot be changed _itself_, that's why you need to put 'const'
right before the '&' in the declaration of the argument.

V
 

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,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top