document ms compiler problems with placement delete

This commit is contained in:
Jeff Hill
2002-10-24 18:12:03 +00:00
parent c7a8baee1a
commit 8dc8be9ad7
23 changed files with 168 additions and 59 deletions
+2 -11
View File
@@ -50,7 +50,6 @@ public:
class epicsTimer { // X aCC 655
public:
virtual ~epicsTimer () = 0;
virtual void destroy () = 0;
virtual void start ( epicsTimerNotify &, const epicsTime & ) = 0;
virtual void start ( epicsTimerNotify &, double delaySeconds ) = 0;
@@ -63,11 +62,8 @@ public:
virtual expireInfo getExpireInfo () const = 0;
double getExpireDelay ();
virtual void show ( unsigned int level ) const = 0;
private:
void * operator new ( size_t );
void * operator new [] ( size_t );
void operator delete ( void * );
void operator delete [] ( void * );
protected:
virtual ~epicsTimer () = 0; // protected => delete() must not be called
};
class epicsTimerQueue { // X aCC 655
@@ -86,11 +82,6 @@ public:
virtual void release () = 0;
protected:
virtual ~epicsTimerQueueActive () = 0;
private:
void * operator new ( size_t );
void * operator new [] ( size_t );
void operator delete ( void * );
void operator delete [] ( void * );
};
class epicsTimerQueueNotify { // X aCC 655
+15 -5
View File
@@ -49,7 +49,7 @@ void timer::destroy ()
{
timerQueue & queueTmp ( this->queue );
this->~timer ();
timer::operator delete ( this, queueTmp.timerFreeList ) ;
//timer::operator delete ( this, queueTmp.timerFreeList ) ;
}
void timer::start ( epicsTimerNotify & notify, double delaySeconds )
@@ -225,13 +225,23 @@ void timer::show ( unsigned int level ) const
void timer::operator delete ( void * pCadaver )
{
throw std::logic_error
( "compiler is confused about placement delete" );
// Visual C++ .net appears to require operator delete if
// placement operator delete is defined? I smell a ms rat
// because if I declare placement new and delete, but
// comment out the placement delete definition there are
// no undefined symbols.
errlogPrintf ( "%s:%d this compiler is confused about placement delete - memory was probably leaked",
__FILE__, __LINE__ );
}
void epicsTimerForC::operator delete ( void * pCadaver )
{
throw std::logic_error
( "compiler is confused about placement delete" );
// Visual C++ .net appears to require operator delete if
// placement operator delete is defined? I smell a ms rat
// because if I declare placement new and delete, but
// comment out the placement delete definition there are
// no undefined symbols.
errlogPrintf ( "%s:%d this compiler is confused about placement delete - memory was probably leaked",
__FILE__, __LINE__ );
}
+13 -4
View File
@@ -55,6 +55,11 @@ private:
epicsTimerNotify * pNotify; // callback
void privateStart ( epicsTimerNotify & notify, const epicsTime & );
timer & operator = ( const timer & );
// Visual C++ .net appears to require operator delete if
// placement operator delete is defined? I smell a ms rat
// because if I declare placement new and delete, but
// comment out the placement delete definition there are
// no undefined symbols.
void * operator new ( size_t size );
void operator delete ( void * );
friend class timerQueue;
@@ -75,6 +80,11 @@ private:
void * pPrivate;
expireStatus expire ( const epicsTime & currentTime );
epicsTimerForC & operator = ( const epicsTimerForC & );
// Visual C++ .net appears to require operator delete if
// placement operator delete is defined? I smell a ms rat
// because if I declare placement new and delete, but
// comment out the placement delete definition there are
// no undefined symbols.
void * operator new ( size_t size );
void operator delete ( void * );
friend class timerQueue;
@@ -119,14 +129,13 @@ class timerQueueActive : public epicsTimerQueueActive,
public timerQueueActiveMgrPrivate {
public:
timerQueueActive ( bool okToShare, unsigned priority );
virtual ~timerQueueActive () = 0;
epicsTimer & createTimer ();
epicsTimerForC & createTimerForC ( epicsTimerCallback pCallback, void *pArg );
void show ( unsigned int level ) const;
bool sharingOK () const;
unsigned threadPriority () const;
void * operator new ( size_t );
void operator delete ( void * );
protected:
virtual ~timerQueueActive () = 0;
private:
timerQueue queue;
epicsEvent rescheduleEvent;
@@ -178,7 +187,7 @@ public:
epicsTimerQueuePassiveForC ( epicsTimerQueueRescheduleCallback pCallback, void *pPrivate );
void destroy ();
protected:
virtual ~epicsTimerQueuePassiveForC ();
~epicsTimerQueuePassiveForC ();
private:
epicsTimerQueueRescheduleCallback pCallback;
void *pPrivate;