Pure virtual destructor in template class

Discussion in 'C++' started by Tonni Tielens, Nov 18, 2008.

  1. I'm trying to create a pure virtual class describing an interface.
    Normally, when I do this I make the destructor pure virtual so that,
    even if there are no members in the class, it cannot be instantiated.

    The difference now is that I'm making a generic interface with
    template arguments. Template classes should be defined in the header
    file, but it is not allowed for a destructor's definition to be in the
    class definition if the destructor is pure virtual. Atleast not with
    GCC -pedantic and I understand this is correct behavior. I'm unsure on
    how to solve this. I know I don't really have to put a pure virtual
    destructor in the class, but I think it's good practice so if it's
    possible I would like to stick to this.

    My code looks like the following:


    template <typename TypeA, typename TypeB>
    struct MyInterface
    {
    virtual ~MyInterface() = 0;

    virtual void Foo(TypeA a, TypeB b) = 0;
    };


    I already found that I can resolve the compilation errors, by adding


    template <typename TypeA, typename TypeB>
    MyInterface<TypeA, TypeB>::~MyInterface() {}


    in the same file after the class definition, but I'm not sure if this
    is the common way to do this. Is there a correct way to do this or
    should I leave the pure virtual destructor out?
     
    Tonni Tielens, Nov 18, 2008
    #1
    1. Advertising

  2. On Nov 18, 5:52 pm, Victor Bazarov <> wrote:
    > Why would you have an interface with no other members?  Wouldn't it be
    > pretty much useless as an interface?


    It's just a way (and I believe a common way) of telling a class is
    abstract without having the need to have any abstract members.
    Consider Java or C# where you can define an interface without having
    any methods. Completely useless, but perfectly legal. Normally, since
    it is almost no effort, I make the destructor pure virtual, but since
    it is more effort here and I'm going to add pure virtual methods
    anyway, I will leave it out and let the compiler generate a default
    one.

    Thanks for the replies.
     
    Tonni Tielens, Nov 18, 2008
    #2
    1. Advertising

  3. On Nov 18, 7:42 pm, Victor Bazarov <> wrote:
    > No, don't let the compiler do it because in that case it wouldn't be
    > virtual.  You *do* need the destructor to be virtual, trust me.



    Ah, you're completely right. I wasn't thinking while posting that. :)
     
    Tonni Tielens, Nov 18, 2008
    #3
  4. Tonni Tielens

    James Kanze Guest

    On Nov 18, 6:06 pm, Pete Becker <> wrote:
    > On 2008-11-18 11:52:08 -0500, Victor Bazarov <> said:


    > > Tonni Tielens wrote:
    > >> I'm trying to create a pure virtual class describing an
    > >> interface. Normally, when I do this I make the destructor
    > >> pure virtual so that, even if there are no members in the
    > >> class, it cannot be instantiated.


    > > Why would you have an interface with no other members?
    > >  Wouldn't it be pretty much useless as an interface?


    > It's a Java thing.


    I don't think it's only Java. It's known as a tagging
    interface, and it potentially has a role in any staticly typed
    language which supports polymorphism. I think I've actually
    used it once in C++; C++ usually has other ways of solving the
    problem, however, which are generally preferred (because they
    can be made to work with non class types as well). Even in the
    standard, the iterator_tag hierarchy could be considered an
    example of this.

    --
    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, Nov 18, 2008
    #4
    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. santosh

    Pure virtual destructor

    santosh, May 27, 2005, in forum: C++
    Replies:
    11
    Views:
    4,282
    Peter Julian
    Jun 27, 2005
  2. WittyGuy
    Replies:
    37
    Views:
    1,100
    Ben Pope
    Jul 2, 2005
  3. Replies:
    2
    Views:
    591
  4. David Côme

    Pure virtual destructor

    David Côme, Dec 24, 2007, in forum: C++
    Replies:
    6
    Views:
    420
    johanatan
    Dec 27, 2007
  5. hpsoar

    pure virtual destructor

    hpsoar, Feb 4, 2009, in forum: C++
    Replies:
    0
    Views:
    336
    hpsoar
    Feb 4, 2009
Loading...

Share This Page