Squid Web Cache
master
Loading...
Searching...
No Matches
VirtualDeleteOperator.cc
Go to the documentation of this file.
1
/*
2
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3
*
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.
7
*/
8
9
#include "
squid.h
"
10
11
#include <iostream>
12
13
class
CallCounter
14
{
15
public
:
16
CallCounter
();
17
void
recordNew
();
18
void
recordDelete
();
19
size_t
news
()
const
;
20
size_t
deletes
()
const
;
21
private
:
22
size_t
_news
,
_deletes
;
23
};
24
25
CallCounter::CallCounter
() : _news(0), _deletes(0) {}
26
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
;}
31
32
class
BaseVirtual
33
{
34
public
:
35
void
*
operator
new
(
size_t
);
36
void
operator
delete
(
void
*);
37
virtual
~BaseVirtual
();
38
static
void
DeleteABase
(
BaseVirtual
*aBase);
39
static
CallCounter
Calls
;
40
};
41
42
CallCounter
BaseVirtual::Calls
;
43
44
void
*
45
BaseVirtual::operator
new
(
size_t
byteCount)
46
{
47
Calls.
recordNew
();
48
return ::operator
new
(byteCount);
49
}
50
51
void
52
BaseVirtual::operator
delete
(
void
*address)
53
{
54
Calls.recordDelete();
55
::operator
delete
(address);
56
}
57
58
void
59
BaseVirtual::DeleteABase
(
BaseVirtual
*aBase)
60
{
61
delete
aBase;
62
}
63
64
BaseVirtual::~BaseVirtual
() {}
65
66
class
ChildVirtual
:
public
BaseVirtual
67
{
68
public
:
69
void
*
operator
new
(
size_t
);
70
void
operator
delete
(
void
*);
71
~ChildVirtual
()
override
;
72
static
CallCounter
Calls
;
73
};
74
75
CallCounter
ChildVirtual::Calls
;
76
77
void
*
78
ChildVirtual::operator
new
(
size_t
byteCount)
79
{
80
Calls.
recordNew
();
81
return ::operator
new
(byteCount);
82
}
83
84
void
85
ChildVirtual::operator
delete
(
void
*address)
86
{
87
Calls.recordDelete();
88
::operator
delete
(address);
89
}
90
91
ChildVirtual::~ChildVirtual
() {}
92
93
int
94
main
(
int
,
char
*[])
95
{
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);
116
return
EXIT_SUCCESS;
117
}
118
assert
#define assert(EX)
Definition
assert.h:17
BaseVirtual
Definition
VirtualDeleteOperator.cc:33
BaseVirtual::DeleteABase
static void DeleteABase(BaseVirtual *aBase)
Definition
VirtualDeleteOperator.cc:59
BaseVirtual::~BaseVirtual
virtual ~BaseVirtual()
Definition
VirtualDeleteOperator.cc:64
BaseVirtual::Calls
static CallCounter Calls
Definition
VirtualDeleteOperator.cc:39
CallCounter
Definition
VirtualDeleteOperator.cc:14
CallCounter::_news
size_t _news
Definition
VirtualDeleteOperator.cc:22
CallCounter::_deletes
size_t _deletes
Definition
VirtualDeleteOperator.cc:22
CallCounter::recordDelete
void recordDelete()
Definition
VirtualDeleteOperator.cc:28
CallCounter::CallCounter
CallCounter()
Definition
VirtualDeleteOperator.cc:25
CallCounter::recordNew
void recordNew()
Definition
VirtualDeleteOperator.cc:27
CallCounter::news
size_t news() const
Definition
VirtualDeleteOperator.cc:29
CallCounter::deletes
size_t deletes() const
Definition
VirtualDeleteOperator.cc:30
ChildVirtual
Definition
VirtualDeleteOperator.cc:67
ChildVirtual::~ChildVirtual
~ChildVirtual() override
Definition
VirtualDeleteOperator.cc:91
ChildVirtual::Calls
static CallCounter Calls
Definition
VirtualDeleteOperator.cc:72
main
int main()
Definition
kerberos_ldap_group.cc:492
squid.h
size_t
int const char size_t
Definition
stub_liblog.cc:83
squid
test-suite
VirtualDeleteOperator.cc
Generated by
1.9.8