document ms compiler problems with placement delete
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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__ );
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user