Class members that MUST be initialized by temporary objects in amember initialization list

Discussion in 'C++' started by Olumide, Dec 6, 2007.

  1. Olumide

    Olumide Guest

    Hello C++ gurus,

    I've got this basic class thats the backbone of my project and I
    frequently use use an instance of it to initialize other objects like
    so. However, my latest class, a simple assignment in a constructor did
    not work, like so:

    class VeryBasicClass{
    public:
    VeryBasicClass(){};
    };

    class LatestClass{
    public:
    LatestClass( VeryBasicClass &vbo );
    private:
    VeryBasicClass veryBasicObject;
    };

    LatestClass::LatestClass( VeryBasicClass &vbo )
    {
    veryBasicObject = vbo; // this does not work
    // halts plugin execution
    }

    The following constructor caused the environment (I'm developing a
    plugin) to crash with a BLOCK_TYPE_IS_VALID assert

    LatestClass::LatestClass( VeryBasicClass &vbo ):veryBasicObject( vbo )
    {
    }

    The following constructor however worked

    LatestClass::LatestClass( VeryBasicClass
    &vbo ):veryBasicObject( VeryBasicObject() )
    {
    }

    I would know why the first why the first two constructors failed, and
    the only the third works, and I'd hate to be in the dark about these
    things. Its better to know whats going on in case something goes
    wrong.

    All thats unique about VeryBasicClass is that itself contains a member
    object that must be initialized by a temporary object in a member
    initialization lists of a constructor. I'm not the author of the
    members class (its part of the plugin API).

    Thanks

    - Olumide
    Olumide, Dec 6, 2007
    #1
    1. Advertising

  2. Re: Class members that MUST be initialized by temporary objects ina member initialization list

    * Olumide:
    > Hello C++ gurus,
    >
    > I've got this basic class thats the backbone of my project and I
    > frequently use use an instance of it to initialize other objects like
    > so. However, my latest class, a simple assignment in a constructor did
    > not work, like so:
    >
    > class VeryBasicClass{
    > public:
    > VeryBasicClass(){};
    > };
    >
    > class LatestClass{
    > public:
    > LatestClass( VeryBasicClass &vbo );
    > private:
    > VeryBasicClass veryBasicObject;
    > };
    >
    > LatestClass::LatestClass( VeryBasicClass &vbo )
    > {
    > veryBasicObject = vbo; // this does not work
    > // halts plugin execution
    > }
    >
    > The following constructor caused the environment (I'm developing a
    > plugin) to crash with a BLOCK_TYPE_IS_VALID assert
    >
    > LatestClass::LatestClass( VeryBasicClass &vbo ):veryBasicObject( vbo )
    > {
    > }
    >
    > The following constructor however worked
    >
    > LatestClass::LatestClass( VeryBasicClass
    > &vbo ):veryBasicObject( VeryBasicObject() )
    > {
    > }
    >
    > I would know why the first why the first two constructors failed, and
    > the only the third works, and I'd hate to be in the dark about these
    > things. Its better to know whats going on in case something goes
    > wrong.
    >
    > All thats unique about VeryBasicClass is that itself contains a member
    > object that must be initialized by a temporary object in a member
    > initialization lists of a constructor. I'm not the author of the
    > members class (its part of the plugin API).


    It seems that at the end of writing the above, in the very last
    paragraph, a glimmer of insight started to surface. Try to follow that
    thought. All that came before is worthless for diagnosing what the
    technical problem is.

    Cheers, & hth.,

    - Alf

    --
    A: Because it messes up the order in which people normally read text.
    Q: Why is it such a bad thing?
    A: Top-posting.
    Q: What is the most annoying thing on usenet and in e-mail?
    Alf P. Steinbach, Dec 6, 2007
    #2
    1. Advertising

  3. Olumide

    Andre Kostur Guest

    Re: Class members that MUST be initialized by temporary objects in a member initialization list

    Olumide <> wrote in news:30b3ed9c-fdfb-4d2a-b38f-
    :

    > Hello C++ gurus,
    >
    > I've got this basic class thats the backbone of my project and I
    > frequently use use an instance of it to initialize other objects like
    > so. However, my latest class, a simple assignment in a constructor did
    > not work, like so:
    >
    > class VeryBasicClass{
    > public:
    > VeryBasicClass(){};
    > };
    >
    > class LatestClass{
    > public:
    > LatestClass( VeryBasicClass &vbo );
    > private:
    > VeryBasicClass veryBasicObject;
    > };
    >
    > LatestClass::LatestClass( VeryBasicClass &vbo )
    > {
    > veryBasicObject = vbo; // this does not work
    > // halts plugin execution
    > }
    >
    > The following constructor caused the environment (I'm developing a
    > plugin) to crash with a BLOCK_TYPE_IS_VALID assert
    >
    > LatestClass::LatestClass( VeryBasicClass &vbo ):veryBasicObject( vbo )
    > {
    > }
    >
    > The following constructor however worked
    >
    > LatestClass::LatestClass( VeryBasicClass
    > &vbo ):veryBasicObject( VeryBasicObject() )
    > {
    > }
    >
    > I would know why the first why the first two constructors failed, and
    > the only the third works, and I'd hate to be in the dark about these
    > things. Its better to know whats going on in case something goes
    > wrong.
    >
    > All thats unique about VeryBasicClass is that itself contains a member
    > object that must be initialized by a temporary object in a member
    > initialization lists of a constructor. I'm not the author of the
    > members class (its part of the plugin API).


    To paraphrase your answer: "The only interesting part of VeryBasicClass
    is the part I'm not going to show you".

    Provide a _minimal_, _compilable_ example which shows your problem.
    Andre Kostur, Dec 6, 2007
    #3
  4. Olumide

    yurec Guest

    On Dec 6, 4:53 am, "Alf P. Steinbach" <> wrote:
    > * Olumide:
    >
    >
    >
    >
    >
    > > Hello C++ gurus,

    >
    > > I've got this basic class thats the backbone of my project and I
    > > frequently use use an instance of it to initialize other objects like
    > > so. However, my latest class, a simple assignment in a constructor did
    > > not work, like so:

    >
    > > class VeryBasicClass{
    > > public:
    > > VeryBasicClass(){};
    > > };

    >
    > > class LatestClass{
    > > public:
    > > LatestClass( VeryBasicClass &vbo );
    > > private:
    > > VeryBasicClass veryBasicObject;
    > > };

    >
    > > LatestClass::LatestClass( VeryBasicClass &vbo )
    > > {
    > > veryBasicObject = vbo; // this does not work
    > > // halts plugin execution
    > > }

    >
    > > The following constructor caused the environment (I'm developing a
    > > plugin) to crash with a BLOCK_TYPE_IS_VALID assert

    >
    > > LatestClass::LatestClass( VeryBasicClass &vbo ):veryBasicObject( vbo )
    > > {
    > > }

    >
    > > The following constructor however worked

    >
    > > LatestClass::LatestClass( VeryBasicClass
    > > &vbo ):veryBasicObject( VeryBasicObject() )
    > > {
    > > }

    >
    > > I would know why the first why the first two constructors failed, and
    > > the only the third works, and I'd hate to be in the dark about these
    > > things. Its better to know whats going on in case something goes
    > > wrong.

    >
    > > All thats unique about VeryBasicClass is that itself contains a member
    > > object that must be initialized by a temporary object in a member
    > > initialization lists of a constructor. I'm not the author of the
    > > members class (its part of the plugin API).

    >
    > It seems that at the end of writing the above, in the very last
    > paragraph, a glimmer of insight started to surface. Try to follow that
    > thought. All that came before is worthless for diagnosing what the
    > technical problem is.
    >
    > Cheers, & hth.,
    >
    > - Alf
    >
    > --
    > A: Because it messes up the order in which people normally read text.
    > Q: Why is it such a bad thing?
    > A: Top-posting.
    > Q: What is the most annoying thing on usenet and in e-mail?- Hide quoted text -
    >
    > - Show quoted text -


    I think you know, but to be sure : you'll get slicing while copying
    VeryBasicClass ( as it's value in your member list)
    Maybe something is missed in copying VeryBasicClass?
    yurec, Dec 7, 2007
    #4
  5. Olumide

    James Kanze Guest

    On Dec 6, 3:53 am, "Alf P. Steinbach" <> wrote:
    > * Olumide:
    > > I've got this basic class thats the backbone of my project and I
    > > frequently use use an instance of it to initialize other objects like
    > > so. However, my latest class, a simple assignment in a constructor did
    > > not work, like so:


    > > class VeryBasicClass{
    > > public:
    > > VeryBasicClass(){};
    > > };


    > > class LatestClass{
    > > public:
    > > LatestClass( VeryBasicClass &vbo );
    > > private:
    > > VeryBasicClass veryBasicObject;
    > > };


    > > LatestClass::LatestClass( VeryBasicClass &vbo )
    > > {
    > > veryBasicObject = vbo; // this does not work
    > > // halts plugin execution
    > > }


    > > The following constructor caused the environment (I'm
    > > developing a plugin) to crash with a BLOCK_TYPE_IS_VALID
    > > assert


    Hmmm. It doesn't cause any problems in my environment. Are you
    sure you're showing us the complete code, and that
    VeryBasicClass is really that simple.

    > > LatestClass::LatestClass( VeryBasicClass &vbo ):veryBasicObject( vbo )
    > > {
    > > }


    > > The following constructor however worked


    > > LatestClass::LatestClass( VeryBasicClass
    > > &vbo ):veryBasicObject( VeryBasicObject() )
    > > {
    > > }


    > > I would know why the first why the first two constructors failed, and
    > > the only the third works, and I'd hate to be in the dark about these
    > > things. Its better to know whats going on in case something goes
    > > wrong.


    > > All thats unique about VeryBasicClass is that itself
    > > contains a member object that must be initialized by a
    > > temporary object in a member initialization lists of a
    > > constructor. I'm not the author of the members class (its
    > > part of the plugin API).


    > It seems that at the end of writing the above, in the very
    > last paragraph, a glimmer of insight started to surface. Try
    > to follow that thought. All that came before is worthless for
    > diagnosing what the technical problem is.


    I'm not that sure. What's the difference between the last two?
    About the only thing I can see is that there is something wrong
    in the copy constructor of VeryBasicClass, and that the compiler
    optimizes the actual call of the copy constructor out in the
    last case.

    The fact remains that the code he has posted is fine. But since
    the code he has posted isn't the code which is causing him
    problems, that doesn't help us (or him) much.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Dec 9, 2007
    #5
    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. CoolPint
    Replies:
    8
    Views:
    955
    Jeff Schwab
    Dec 14, 2003
  2. Steven T. Hatton
    Replies:
    4
    Views:
    397
    Siemel Naran
    Aug 27, 2004
  3. Skybuck Flying
    Replies:
    2
    Views:
    2,515
    Alf P. Steinbach /Usenet
    Jun 21, 2011
  4. Replies:
    11
    Views:
    4,118
    sameer k
    Sep 6, 2012
  5. fl
    Replies:
    2
    Views:
    86
    Kaz Kylheku
    Jan 15, 2014
Loading...

Share This Page