Форум программистов, компьютерный форум 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; }; подробнее

Показать сообщение отдельно
HelicopterK52
633 / 176 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
21.08.2016, 15:40     Поменять 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
#include <iostream>
 
 
struct Base
{
public:
    ~Base() { std::cout << "Base::~Base" << std::endl; }
};
 
 
 
struct First : Base
{
public:
    ~First() { std::cout << "First::~First" << std::endl; }
};
 
 
 
 
struct Second : Base
{
public:
    ~Second() { std::cout << "Second::~Second" << std::endl; }
};
 
 
 
Base *make()
{
    unsigned x = 0;
    if(!(std::cin >> x))
    {
        return nullptr;
    }
    if(x&1)
        return new First();
    return new Second(); 
}
 
 
 
 
void release(Base *ptr)
{
    delete ptr;
}
 
 
 
 
int main()
{
    while(true)
    {
        auto ptr1 = make();
        if(ptr1 == nullptr)
        {
            break;
        }
        //...
        release(ptr1);
    }
}
make создает объекты в зависимости от ввода пользователя, при ошибке ввода возвращает nullptr.
Если ввод удался, то создается соответствующий объект (это может быть расширено в дальнейшем).
В данном коде деструкторы не виртуальные, поэтому в release будет вызван лишь деструктор базового класса.

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

Учтите, что сами классы, а также функцию main менять нельзя. Также в будущем планируется добавлять наследников Base, поэтому решение должно быть расширяемым без особого труда.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru