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?
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?