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

Дин. выделение памяти, конструкторы/деструкторы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Двумерные массивы. http://www.cyberforum.ru/cpp-beginners/thread382129.html
для заданной матрицы размером 8x8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Как это вообще? Второй день голову ломаю)) Видел такую тему на паскале но с паскалем не дружу.. может кто-то что то подобное видел? Пожалуйста помогите добрые люди!! Матрицу конечно сделал, а вот с заданием проблемы)))
C++ Конструктор дерева (не бинарного). Или как вообще правильно строить дерево? Хочу разобраться с деревьями, да что только не читал, не пересматривал - не могу разобраться. Для примера - хочу построить дерево такого типа Вот так себе я представлял его class Tree { public: char id; http://www.cyberforum.ru/cpp-beginners/thread382103.html
C++ Дана матрица размером N*M
Начинающий - а тут еще и матрицы не могу решить данное чудо( Задача Дана матрица размером N*M, назовем особым элемент текущей строки, если он больше суммы элементов ему предшествующих в строке. Определить строку с наибольшим кол-вом особых элементов. за задачу заранее благодарен! Название темы должно отображать её суть. И неплохо было бы указать язык, Си или С++
C++ В cmd не отображается русские буквы
В cmd не отображается русские буквы, что я могу сделать, что бы это исправить ?
C++ Поменять первый максимальный и последний минимальный элемент массива http://www.cyberforum.ru/cpp-beginners/thread382087.html
Посмотрите, пожалуйста, где тут ошибка #include <iostream> using namespace std; int findMax(int *A, unsigned int size) // функция нахождения максим элемента { if (A==NULL && size==0) return 0;
C++ Найти максимальный по модулю элемент матрицы.. Задана матрица размеро n*m. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент был расположен на пересечений k-ой строки и k-ого столбца. подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
12.11.2011, 21:35     Дин. выделение памяти, конструкторы/деструкторы
Цитата Сообщение от Chelioss Посмотреть сообщение
Хотел бы уточнить.
1)
Чем отличается это:
C++
1
2
3
4
5
int main()
{
    int value = 0;
    return 0;
}
от этого
C++
1
2
3
4
5
6
int main()
{
    int *ptr = new int(0);
    delete ptr;
    return 0;
}
?
Про то, что первое будет находится в стэке, а второе в куче я знаю.
А какие другие различия?
Да и что выигрывает? Стэк или куча? Думаю, что стэк, но уточнить стоит.

2) При вызове деструктора уничтожаются все не статические объекты класса? Я говорю про int value, char name[ 50 ], std::string и т.д. Про то, что динамически выделенную память надо освобождать самому я знаю.
Даже если деструктор вызвать в ручную?
3) При вызове конструктора создаются все не статические объекты класса? Даже если вызвать конструктор в ручную?
По первому вопросу отличие очевидно. delete делает две вещи: вызывает деструктор, а затем вызывает оператор-функцию delete. Причем эта функция для пользовательских типов может быть перегружена.
В вашем примере. когда целочисленная переменная определяется в стеке, то компилятор не вызывает оператор-функцию delete. Ей просто делать нечего. Компилятор просто выравнивает стек до вызова в функцию main. То есть во втором случае с кучей мы получаем дополнительные издержки по вызову оператор-функции.
Кроме того даже при инициализации объекта в кучи функции new нужно передать аргумент, который в вашем случае равен нулю. Это еще дополнительные издержки, то есть издержки по передачи аргументов в функцию. Когда же переменная создается в стеке, то компилятор просто "вшивает" инструкцию инициализации в код.

Отвечая на второй вопрос, замечу, что деструкторы имеются только у пользовательских типов. К фундаментальным типам деструкторы никакого отношения не имеют. Если вы имеет класс, в которым определены поля в виде фундаментальных типов, то из памяти удаляется один непрерывный участок, который был выделен для объекта.

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