Listing 2: Several classes implementing ScrubPolicy
template <class Scrubber>
class ScrubOnDestroy : Scrubber
{
public:
inline void onDestroy(void* pmem, size_t numBytes)
{
doScrub(pmem, numBytes);
}
inline void onDeallocate(void* pmem, size_t numBytes)
{}
};
template <class Scrubber>
class ScrubOnDeallocate : Scrubber
{
public:
inline void onDestroy(void* pmem, size_t numBytes)
{}
inline void onDeallocate(void* pmem, size_t numBytes)
{
doScrub(pmem, numBytes);
}
};
class BasicScrubber
{
public:
inline void doScrub(void* pmem, size_t numBytes)
{
memset(pmem, 0x00, numBytes);
}
};
class HeavyScrubber
{
public:
inline void doScrub(void* pmem, size_t numBytes)
{
memset(pmem, 0xAA, numBytes);
memset(pmem, 0x55, numBytes);
memset(pmem, 0xFF, numBytes);
memset(pmem, 0x00, numBytes);
}
};
class NoScrubber
{
public:
inline void doScrub(void* pmem, size_t numBytes) {}
};