我正在尝试编写一个测试,以查看在为单链接列表类的实现调用析构函数之后是否释放了所有内存。
关于我如何使用GTest做到这一点的任何想法?
这是我到目前为止所拥有的:
链接列表类的实现:
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
class SinglyLinkedList
{
private:
int list_size; // internal size variable to amortize size()
ListNode* tail_; // Pointer to the last element to amortize push_back() and back()
void new_head_tail(int i); // internal function to initialize a list with its first element
public:
ListNode* head_; // Pointer to the first element
// default constructor
SinglyLinkedList()
{
// initialize ListNode
head_ = nullptr;
tail_ = nullptr;
list_size = 0;
}
// destructor
~SinglyLinkedList()
{
while(!this->empty())
{
this->pop_front();
}
}
bool empty(); // checks if empty
void push_front(int i); // inserts at the front
void pop_front(); // removes the first item
// ... other functions
};
相关功能:
void SinglyLinkedList::push_front(int i)
{
if(this->head_ != nullptr)
{
ListNode* n = new ListNode(i);
n->next = this->head_;
this->head_ = n;
}
else
{
this->new_head_tail(i);
}
this->list_size++;
}
void SinglyLinkedList::pop_front()
{
if(this->head_ != nullptr)
{
ListNode* n = this->head_;
this->head_ = this->head_->next;
n->next = nullptr;
delete n;
this->list_size--;
}
else
{
printf("List Empty. Nothing to pop.\n");
}
}
bool SinglyLinkedList::empty()
{
return (this->list_size == 0);
}
测试:
TEST(SINGLY_LINKED_LIST_TEST, DESTRUCTOR)
{
SinglyLinkedList* sll = new SinglyLinkedList();
delete sll;
SinglyLinkedList* expected = nullptr;
EXPECT_EQ(expected, sll);
}
显然,上述操作失败了,因为sll的位置是一个随机的十六进制值。因此,我想知道如何最好地使用GTest库来确保已正确释放所有内存。
注意:我仅动态分配该类的实例,因此可以确保在运行EXPECT_EQ()之前已调用析构函数。