Форум программистов, компьютерный форум CyberForum.ru

Поменять make и release так, чтобы организовать правильное уничтожение объектов и освобождение памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задачка для новичков #3: определить, является ли строка палиндромом http://www.cyberforum.ru/cpp-beginners/thread1796830.html
Простенькая задачка, нужно запилить нормальный плюсовый код. Юзер посимвольно вводит строку, прога должна определять, является ли введенное палиндромом: a - yes (юзер ввел a) ab - no (потом юзер ввел b) abb - no (снова ввел b и так далее) abbc - no abbcb - no abbcbb - no
C++ Найти самую длинную последовательности чисел, упорядоченную по возрастанию 4. Найти самую длинную последовательности чисел, упорядоченную по возрастанию. Пример: 5 7 8 9 3 0 4 6 8 9 3 4 3 На выходе: 0 4 6 8 9 http://www.cyberforum.ru/cpp-beginners/thread1796816.html
Найти и вывести уникальные элементы массива C++
3. В массиве найти элементы, которые в нем встречаются только один раз, и вывести их на экран. То есть найти и вывести уникальные элементы массива.
Заполнить массив случайными числами и определить количество элементов, отличных от последнего C++
2. Дан массив из 50 чисел. Заполните его случайными числами. Определить, сколько в нем элементов, отличных от последнего элемента. Вывести их количество.
C++ Объединить два заданных массива и отсортировать их по возрастанию http://www.cyberforum.ru/cpp-beginners/thread1796795.html
Помогите с задачами. 1. Имеются два массива данных А и B (а и в – количества элементов массива). Известно, что оба массива упорядочены по возрастанию. Необходимо написать алгоритм, проходящий по этим массивам за 1 цикл вида: Для Сч = 1 По а + в Цикл и выдающий значения обоих массивов в порядке возрастания т.е. как бы объединив оба массива и отсортировав их по возрастанию.
C++ Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса Вдохновленный соседней темой тоже решил задать свой вопрос таким же начинающим программистам как и я :) Все кто хочет попробовать дать ответ помещайте его под спойлер Задача: дан вот такой код class Parent { public: virtual void doSmth(void) = 0; }; подробнее

Показать сообщение отдельно
Babysitter
 Аватар для Babysitter
78 / 103 / 34
Регистрация: 23.11.2015
Сообщений: 315
Завершенные тесты: 1
21.08.2016, 19:15     Поменять make и release так, чтобы организовать правильное уничтожение объектов и освобождение памяти
а я подумал про что-то такое и дооолго костылил
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
 
struct Base
{
public:
    virtual void foo() {}
    ~Base() { std::cout << "Base::~Base" << std::endl; }
};
 
struct First : Base
{
public:
    void foo() override { std::cout << "First::foo" << std::endl; }
    ~First() { std::cout << "First::~First" << std::endl; }
};
 
struct Second : Base
{
public:
    void foo() override { std::cout << "Second::foo" << std::endl; }
    ~Second() { std::cout << "Second::~Second" << std::endl; }
};
 
// ugly
struct Wrapper
{
    enum class Type{ first, second };
    Wrapper(Base* base, Type type) : empty(false), type_(type), base_(base)  {}
    ~Wrapper() {
        switch(type_)
        {
            case Type::first:
                delete dynamic_cast<First*>(base_);
                break;
            case Type::second:
                delete dynamic_cast<Second*>(base_);
                break;
        }
    }
    // hack
    Wrapper(std::nullptr_t) : empty(true) {}
    bool operator==(std::nullptr_t) { return empty; }
    Base* operator->() { return base_; }
    Base& operator*() { return *base_; }
private:
    bool empty;
    Type type_;
    Base* base_;
};
bool operator==(std::nullptr_t, Wrapper& x) { return x == nullptr; }
 
Wrapper make()
{
    unsigned x = 0;
    if(!(std::cin >> x))
    {
        return nullptr;
    }
    if(x&1)
        return Wrapper{new First{}, Wrapper::Type::first};
    return Wrapper{new Second{}, Wrapper::Type::second}; 
}
 
void release(Wrapper&) {}
 
int main()
{
    while(true)
    {
        auto ptr1 = make();
        if(ptr1 == nullptr)
        {
            break;
        }
        ptr1->foo();
        release(ptr1);
    }
}
нужно зашаблонить еще
 
Текущее время: 19:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru