Click here to Skip to main content
12,634,422 members (28,058 online)
Click here to Skip to main content
Add your own
alternative version

Stats

56.9K views
1 download
16 bookmarked
Posted

BUG in Visual C++ access for destructors with virtual base classes

, 5 Apr 2000
Rate this:
Please Sign up or sign in to vote.
When inheriting from a virtual base class the access specifier for the destructor is ignored

Introduction

This bug appears in VC6 SP3, and possibly earlier versions as well.

When inheriting from a virtual base class the access specifier for the destructor is ignored

To demonstrate, if the word virtual is commented out as shown below in the declaration of class B, this program correctly produces the error message

xxx.cpp(28) : error C2248: 'B::~B' : cannot
access protected member declared in class 'B'
xxx.cpp(23) : see declaration of 'B::~B'

If the word virtual is un-commented then the program builds without error messages despite the destructor being declared private

The offending code

#include "stdafx.h"

class A {
protected:
    ~A() {}
};

class B : virtual public A {
private:
    ~B() {}
};

int main(int argc, char* argv[])
{
    B b;
    return 0;
}

As a bit of history, I am implementing some smart pointers and want to ensure that the smart-pointer target object cannot be created locally on the stack, nor do I want to be able to explicitly call delete on a pointer to such an object. Hence I want the destructor to be private. However, this fails (as shown above) when I am inheriting from a virtual base class.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Roger Onslow
United States United States
No Biography provided

You may also be interested in...

Pro

Comments and Discussions

 
GeneralVC++ compiler bug Pin
isheu26-Aug-08 3:28
memberisheu26-Aug-08 3:28 
QuestionShould be virtual? Pin
AlexMarbus10-May-01 3:50
memberAlexMarbus10-May-01 3:50 
AnswerRe: Should be virtual? Pin
Anonymous10-May-01 7:09
memberAnonymous10-May-01 7:09 
GeneralBeside the point Pin
Roger Onslow10-Apr-00 16:45
sussRoger Onslow10-Apr-00 16:45 
GeneralC++ Compiler bug Pin
Dave Lorde10-Apr-00 1:05
sussDave Lorde10-Apr-00 1:05 
GeneralC++ compiler BUG Pin
Alex Turc6-Apr-00 2:25
sussAlex Turc6-Apr-00 2:25 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.161208.2 | Last Updated 6 Apr 2000
Article Copyright 2000 by Roger Onslow
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid