Works around a Symbian compiler bug that causes memory leak (by Mika Raento).

This commit is contained in:
zhanyong.wan 2009-10-01 21:56:16 +00:00
parent 79643f51ed
commit 7c95d8346e
2 changed files with 18 additions and 3 deletions

View File

@ -351,10 +351,18 @@ class Mock {
// - Constness is shallow: a const Expectation object itself cannot
// be modified, but the mutable methods of the ExpectationBase
// object it references can be called via expectation_base().
// - The constructors and destructor are defined out-of-line because
// the Symbian WINSCW compiler wants to otherwise instantiate them
// when it sees this class definition, at which point it doesn't have
// ExpectationBase available yet, leading to incorrect destruction
// in the linked_ptr (or compilation errors if using a checking
// linked_ptr).
class Expectation {
public:
// Constructs a null object that doesn't reference any expectation.
Expectation() {}
Expectation();
~Expectation();
// This single-argument ctor must not be explicit, in order to support the
// Expectation e = EXPECT_CALL(...);
@ -399,8 +407,7 @@ class Expectation {
typedef ::std::set<Expectation, Less> Set;
Expectation(
const internal::linked_ptr<internal::ExpectationBase>& expectation_base) :
expectation_base_(expectation_base) {}
const internal::linked_ptr<internal::ExpectationBase>& expectation_base);
// Returns the expectation this object references.
const internal::linked_ptr<internal::ExpectationBase>&

View File

@ -420,6 +420,14 @@ void Mock::ClearDefaultActionsLocked(void* mock_obj) {
// needed by VerifyAndClearExpectationsLocked().
}
Expectation::Expectation() {}
Expectation::Expectation(
const internal::linked_ptr<internal::ExpectationBase>& expectation_base)
: expectation_base_(expectation_base) {}
Expectation::~Expectation() {}
// Adds an expectation to a sequence.
void Sequence::AddExpectation(const Expectation& expectation) const {
if (*last_expectation_ != expectation) {