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

Discussion in 'C++' started by Anonymous, Aug 28, 2007.

  1. Anonymous

    Anonymous Guest

    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?
     
    Anonymous, Aug 28, 2007
    #1
    1. Advertising

  2. Anonymous

    Anonymous Guest

    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.
     
    Anonymous, Aug 28, 2007
    #2
    1. Advertising

  3. Anonymous wrote:
    > [..]
    > 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
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
     
    Victor Bazarov, Aug 28, 2007
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Apricot
    Replies:
    4
    Views:
    530
    velthuijsen
    Apr 16, 2004
  2. Raf256
    Replies:
    1
    Views:
    419
    Raf256
    Jun 23, 2006
  3. NVH
    Replies:
    8
    Views:
    488
    mlimber
    Jul 6, 2006
  4. Grizlyk
    Replies:
    8
    Views:
    488
    Grizlyk
    Nov 29, 2006
  5. Anonymous
    Replies:
    2
    Views:
    339
    Barry
    Aug 29, 2007
Loading...

Share This Page