Why use object pointers rather than objects?

Discussion in 'C++' started by krishna.kishore.0987@gmail.com, Oct 15, 2007.

  1. Guest

    Why are always object pointers used? (i.e., ObjectType *objPointer)
    what are the advantages of using object pointers Vs objects
    (ObjectType obj)
    one advantage I see is passing them across methods, but is this purely
    presentation issue (use 'objPointer' rather than '&obj') or are there
    some performance affects?

    -Krishna
     
    , Oct 15, 2007
    #1
    1. Advertising

  2. red floyd Guest

    wrote:
    > Why are always object pointers used? (i.e., ObjectType *objPointer)
    > what are the advantages of using object pointers Vs objects
    > (ObjectType obj)


    Polymorhpism and slicing.

    > one advantage I see is passing them across methods, but is this purely
    > presentation issue (use 'objPointer' rather than '&obj') or are there
    > some performance affects?


    Now you're talking about references instead of copied objects. The
    advantage is that a reference parameter always refers to a valid object
    (modulo UB in the caller, of course).
     
    red floyd, Oct 15, 2007
    #2
    1. Advertising

  3. On 2007-10-15 21:29, wrote:
    > Why are always object pointers used? (i.e., ObjectType *objPointer)


    Probably because of bad design, there is no reason to always use
    pointers, but there cases where you should use them and there are other
    cases where you can.

    > what are the advantages of using object pointers Vs objects
    > (ObjectType obj)
    > one advantage I see is passing them across methods, but is this purely
    > presentation issue (use 'objPointer' rather than '&obj') or are there
    > some performance affects?


    As red floyd pointed out polymorphism is one reason, for large objects
    there is the performance aspect. In some other cases it is about
    semantics, some objects should not or cannot be copied. When determining
    if a member should be an object or a pointer/reference to an object
    there is also the question of ownership.

    Personally I try to use references as much as possible and only use
    pointers when I must. The question of whether an actual object or a
    reference should be used it is often quite clear from the situation if
    you know the differences between them and the implications of using them.

    --
    Erik Wikström
     
    =?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=, Oct 15, 2007
    #3
  4. wrote:
    > Why are always object pointers used? (i.e., ObjectType *objPointer)


    Always? I don't always use them. In fact, I seldom use them.
    This is a very typical example of where I don't use them:

    std::string s = "hello";

    No pointer there.

    > one advantage I see is passing them across methods, but is this purely
    > presentation issue (use 'objPointer' rather than '&obj') or are there
    > some performance affects?


    If you pass an object by value then a copy will most probably be made,
    which will often be less efficient than passing by reference or by
    pointer. Also there's the slicing problem if inheritance is involved.
     
    Juha Nieminen, Oct 15, 2007
    #4
  5. Krishna Guest

    On Oct 15, 2:14 pm, Juha Nieminen <> wrote:
    > wrote:
    > > Why are always object pointers used? (i.e., ObjectType *objPointer)

    >
    > Always? I don't always use them. In fact, I seldom use them.
    > This is a very typical example of where I don't use them:
    >
    > std::string s = "hello";
    >
    > No pointer there.
    >
    > > one advantage I see is passing them across methods, but is this purely
    > > presentation issue (use 'objPointer' rather than '&obj') or are there
    > > some performance affects?

    >
    > If you pass an object by value then a copy will most probably be made,
    > which will often be less efficient than passing by reference or by
    > pointer. Also there's the slicing problem if inheritance is involved.


    Hi Guys,
    Thanks for the replies. When I was punching 'always' I was stuck in
    the world of GUI, I see pointers being used for GUI objects, 'always'
    Thanks again,
    Krishna
     
    Krishna, Oct 15, 2007
    #5
  6. On 2007-10-16 00:46, Krishna wrote:
    > On Oct 15, 2:14 pm, Juha Nieminen <> wrote:
    >> wrote:
    >> > Why are always object pointers used? (i.e., ObjectType *objPointer)

    >>
    >> Always? I don't always use them. In fact, I seldom use them.
    >> This is a very typical example of where I don't use them:
    >>
    >> std::string s = "hello";
    >>
    >> No pointer there.
    >>
    >> > one advantage I see is passing them across methods, but is this purely
    >> > presentation issue (use 'objPointer' rather than '&obj') or are there
    >> > some performance affects?

    >>
    >> If you pass an object by value then a copy will most probably be made,
    >> which will often be less efficient than passing by reference or by
    >> pointer. Also there's the slicing problem if inheritance is involved.

    >
    > Hi Guys,
    > Thanks for the replies. When I was punching 'always' I was stuck in
    > the world of GUI, I see pointers being used for GUI objects, 'always'


    That would probably be because GUI classes often makes heavy use of
    polymorphism, (most graphical elements inherit from a base widget (or
    whatever) class, and often implements a number of interfaces).

    --
    Erik Wikström
     
    =?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=, Oct 16, 2007
    #6
  7. James Kanze Guest

    On Oct 16, 1:01 am, Erik Wikström <> wrote:
    > On 2007-10-16 00:46, Krishna wrote:
    > > On Oct 15, 2:14 pm, Juha Nieminen <> wrote:
    > >> wrote:
    > >> > Why are always object pointers used? (i.e., ObjectType *objPointer)


    > >> Always? I don't always use them. In fact, I seldom use them.
    > >> This is a very typical example of where I don't use them:


    > >> std::string s = "hello";


    > >> No pointer there.


    > >> > one advantage I see is passing them across methods, but is this purely
    > >> > presentation issue (use 'objPointer' rather than '&obj') or are there
    > >> > some performance affects?


    > >> If you pass an object by value then a copy will most probably be made,
    > >> which will often be less efficient than passing by reference or by
    > >> pointer. Also there's the slicing problem if inheritance is involved.


    > > Thanks for the replies. When I was punching 'always' I was stuck in
    > > the world of GUI, I see pointers being used for GUI objects, 'always'


    > That would probably be because GUI classes often makes heavy use of
    > polymorphism, (most graphical elements inherit from a base widget (or
    > whatever) class, and often implements a number of interfaces).


    Independently of polymorphism (although that can also be a
    reason), GUI classes often have identity. If you set the
    background to red, you want it to be on the class instance which
    controls the display, and not some copy. Classes which have
    externally visible behavior often (usually?) have identity, and
    when a class have identity, it can only be passed by reference
    or by a pointer.

    --
    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, Oct 16, 2007
    #7
    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. Fuzzyman
    Replies:
    3
    Views:
    500
    Andrew MacIntyre
    Dec 5, 2003
  2. Robert Brewer
    Replies:
    0
    Views:
    496
    Robert Brewer
    Dec 5, 2003
  3. Adriano Ferreira
    Replies:
    9
    Views:
    581
    Mike Meyer
    Dec 3, 2005
  4. Mr. SweatyFinger
    Replies:
    2
    Views:
    2,031
    Smokey Grindel
    Dec 2, 2006
  5. John Mair
    Replies:
    12
    Views:
    199
    Intransition
    Oct 23, 2010
Loading...

Share This Page