Как я могу проверить, что указатель в моей пользовательской реализации уникального_птC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу проверить, что указатель в моей пользовательской реализации уникального_пт

Сообщение Anonymous »

Я пытаюсь воссоздать некоторые контейнеры C ++, чтобы узнать, как они работают под капюшоном. В настоящее время я учусь реализовать уникальный_ptr . Мой код для уникального_птра Пока что:

Код: Выделить всё

#pragma once
#include 

namespace tom {

template
class unique_ptr {
public:
unique_ptr() noexcept
: ptr_(nullptr) {}
explicit unique_ptr(T* ptr) noexcept
: ptr_(ptr)
{}
~unique_ptr() {
delete ptr_;
ptr_ = nullptr;
}

// Move constructor
unique_ptr(unique_ptr&& other) noexcept : ptr_(other.ptr_) {
other.ptr_ = nullptr;
}

// Move assignment
unique_ptr& operator=(unique_ptr&& other) noexcept {
if (this != &other) {
delete ptr_;
ptr_ = other.ptr_;
other.ptr_ = nullptr;
}
return *this;
}

// Delete copy constructor as unique pointers can only have one owner
unique_ptr(const unique_ptr&) = delete;
// Delete copy assignment as unique pointers can only have one owner
unique_ptr& operator=(const unique_ptr&) = delete;

T& operator*() const noexcept { return *ptr_; }
T* operator->() const noexcept { return ptr_; }
T* get() const noexcept { return ptr_; }

T* release() noexcept {
return std::exchange(ptr_, nullptr);
}

void reset(T* ptr = nullptr) noexcept {
delete ptr_;
ptr_ = ptr;
}

void swap(unique_ptr& other) noexcept {
std::swap(ptr_, other.ptr_);
}
private:
T* ptr_;
};

template
unique_ptr make_unique(Args&&... args) {
T* tmp = new T(std::forward(args)...);
return unique_ptr(tmp);
}

}
Я пишу модульный тест, где я хочу проверить, что при удалении уникального_птра память была освобождена. Тест до сих пор: < /p>

Код: Выделить всё

#include 
#include 

class TestUniquePtr : public ::testing::Test {
protected:
void SetUp() override {

};

void TearDown() override {

};
};

struct Foo {
int x;
int y;
};

TEST_F(TestUniquePtr, Constructor)
{
Foo* foo = new Foo(1, 2);
{
tom::unique_ptr tmp(foo);
}
}
< /code>
Как я могу проверить, что память была удалена, как и
ASSERT_EQ(foo, nullptr)
не работает и пытается получить доступ к переменной члена Foo - неопределенное поведение.


Подробнее здесь: https://stackoverflow.com/questions/796 ... n-has-been
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»