]>
git.ipfire.org Git - thirdparty/squid.git/blob - test-suite/VirtualDeleteOperator.cc
2 * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
20 size_t deletes() const;
22 size_t _news
, _deletes
;
25 CallCounter::CallCounter() : _news(0), _deletes(0) {}
27 void CallCounter::recordNew() { ++_news
;}
28 void CallCounter::recordDelete() { ++_deletes
;}
29 size_t CallCounter::news() const {return _news
;}
30 size_t CallCounter::deletes() const {return _deletes
;}
35 void *operator new (size_t);
36 void operator delete (void *);
37 virtual ~BaseVirtual();
38 static void DeleteABase(BaseVirtual
*aBase
);
39 static CallCounter Calls
;
42 CallCounter
BaseVirtual::Calls
;
45 BaseVirtual::operator new(size_t byteCount
)
48 return ::operator new (byteCount
);
52 BaseVirtual::operator delete(void *address
)
55 ::operator delete (address
);
59 BaseVirtual::DeleteABase(BaseVirtual
*aBase
)
64 BaseVirtual::~BaseVirtual() {}
66 class ChildVirtual
: public BaseVirtual
69 void *operator new (size_t);
70 void operator delete (void *);
71 virtual ~ChildVirtual();
72 static CallCounter Calls
;
75 CallCounter
ChildVirtual::Calls
;
78 ChildVirtual::operator new(size_t byteCount
)
81 return ::operator new (byteCount
);
85 ChildVirtual::operator delete(void *address
)
88 ::operator delete (address
);
91 ChildVirtual::~ChildVirtual() {}
96 assert (BaseVirtual::Calls
.news() == 0);
97 assert (BaseVirtual::Calls
.deletes() == 0);
98 assert (ChildVirtual::Calls
.news() == 0);
99 assert (ChildVirtual::Calls
.deletes() == 0);
100 BaseVirtual
*aBase
= new ChildVirtual
;
101 assert (BaseVirtual::Calls
.news() == 0);
102 assert (BaseVirtual::Calls
.deletes() == 0);
103 assert (ChildVirtual::Calls
.news() == 1);
104 assert (ChildVirtual::Calls
.deletes() == 0);
105 BaseVirtual::DeleteABase(aBase
);
106 assert (BaseVirtual::Calls
.news() == 0);
107 assert (BaseVirtual::Calls
.deletes() == 0);
108 assert (ChildVirtual::Calls
.news() == 1);
109 assert (ChildVirtual::Calls
.deletes() == 1);
110 // deleting nullptr works.
111 BaseVirtual::DeleteABase(nullptr);
112 assert (BaseVirtual::Calls
.news() == 0);
113 assert (BaseVirtual::Calls
.deletes() == 0);
114 assert (ChildVirtual::Calls
.news() == 1);
115 assert (ChildVirtual::Calls
.deletes() == 1);