Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > reference to pointer used in ctor - using 'this' in ctor (repost- corrected sample code)

Reply
Thread Tools

reference to pointer used in ctor - using 'this' in ctor (repost- corrected sample code)

 
 
Anonymous
Guest
Posts: n/a
 
      08-28-2007
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<B>* parent):m_parent(parent){}

A<B>* m_parent ;
};


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

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

A<C>* m_parent ;
};


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


Class A instantiated 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?

 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      08-28-2007
Anonymous wrote:
> [..]


The code still doesn't compile because of numerous errors (like 'm_obj'
and 'm_objs', declarations of friends that are templates, etc. Read
the FAQ 5.8 please.

> class C
> {
> public:
> friend class A;
> ~C(){};
>
> private:
> C(A<C>*& parent):m_parent(parent){}


The advice is still the same:

C(A<C>* const& parent)...

>
> A<C>* m_parent ;
> };
>
>
> int main( int argc, char* argv[])
> {
> A<B> ab ; // Ok
> A<C> ac ; // Croaks here ...
> };
>
>
> Class A instantiated 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?


V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


 
Reply With Quote
 
 
 
 
Barry
Guest
Posts: n/a
 
      08-29-2007
Anonymous wrote:
> 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<B>* parent):m_parent(parent){}
>
> A<B>* m_parent ;
> };
>
>
> class C
> {
> public:
> friend class A;
> ~C(){};
>
> private:
> C(A<C>*& parent):m_parent(parent){}
>
> A<C>* m_parent ;
> };
>
>
> int main( int argc, char* argv[])
> {
> A<B> ab ; // Ok
> A<C> ac ; // Croaks here ...
> };
>
>
> Class A instantiated 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?
>


I attempted to compile your code, but found the template class friend
problem, as Victor marked else-thread.
You inject a friend A into B, actually A is a template class, so you
have to write A<T> as a friend of B(so B have also to be templated),

template <class T>
class B
{
public:
friend class A<T>;
....

when come to declaration of A's object,
A<B> ab;
B have to be changed into B<X>, where X is recursively dependent on T of
A<T>, which is to be a templated B.
So the recursive declaration looks like this:
A<B<B<B....> > >

So the job couldn't be done. Probably you have to redesign your classes.

--
Thanks
Barry
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
reference to pointer used in ctor (using 'this' in ctor) Anonymous C++ 2 08-28-2007 01:10 PM
ctor/dtor calls and ctor init seq Grizlyk C++ 8 11-29-2006 06:35 AM
Templates, copy ctor and type-conversion ctor NVH C++ 8 07-06-2006 07:19 PM
A<B>::ctor() : pointer( (B*) this ) - used for private implementaion (PIMPL) pattern - template framework Raf256 C++ 1 06-23-2006 09:07 PM
three times copy ctor called, one ctor called, why? Apricot C++ 4 04-16-2004 07:55 AM



Advertisments