So I've applied ["cpp:virtual"] to the Ice classes from which we derive our servants. The slice definition for one such class looks like this:
Code:
["cpp:virtual"] class PersistentBasePsu implements BaseSegIF {
// fields and methods
};
slice2cpp produces this:
Code:
class PersistentPsu : virtual public ::SPData::PersistentBasePsu,
virtual public ::SPData::SegmentIF, private IceInternal::GCShared
{
// fields and methods
};
I'm curious why the IceInternal::GCShared is private and non-virtual. I ask, not because I know enough to expect otherwise, but because I can get rid of a build error by making it public and virtual. Here's the error:
/network/Ice-3.4.1/include/Ice/GCShared.h: In destructor ‘IceUtil::Handle<T>::~Handle() [with T = Segment]’:
Initializer.cc:17: instantiated from here
/network/Ice-3.4.1/include/Ice/GCShared.h:34: error: ‘virtual void IceInternal::GCShared::__decRef()’ is inaccessible
/network/Ice-3.4.1/include/IceUtil/Handle.h:197: error: within this context
/network/Ice-3.4.1/include/IceUtil/Handle.h:197: error: ‘IceInternal::GCShared’ is not an accessible base of ‘Segment’
Sorry for asking reverse-engineered questions; I'm just stuck and hoping for another insight like ["cpp:virtual"].