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

Основы: указатель на объект или объект, что выбрать? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не работает strlen http://www.cyberforum.ru/cpp-beginners/thread1553547.html
сабж не могу взять длину строки функция определения возвращает не понятные значения #include <stdlib.h> #include <stdio.h> #include <string.h> #include <locale.h> int main(void) {
C++ Массив: Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. http://www.cyberforum.ru/cpp-beginners/thread1553544.html
C++ Двусвязный список. Добавление элемета в начало
В чем проблема и почему начальный элемент "не закрепляется"? #include <iostream> #include "ListFunctions.h" using namespace std; struct ElementOfList { int value;
Thread разбить программу в несколько потоков mutex, разбить класс на несколько потоков C++
Всем привет! Помогите пожалуйста разделить мою программу на несколько потоков, вроде используют mutex, но я не знаю как его использовать.:help: а вот и сам код: #include "stdafx.h" #include <iostream> #include <conio.h> #include <math.h> using namespace std; class Massiv{
C++ Определить, равен ли квадрат числа учетверенной сумме кубов его цифр http://www.cyberforum.ru/cpp-beginners/thread1553508.html
Дано двузначное число. Определить, равен ли квадрат этого числа учетверенной сумме кубов его цифр. Например, для числа 48 ответ положительный, для числа 52 — отрицательный.
C++ Если массив заканчивается нулѐм, выдать соответствующее сообщение Если массив заканчивается нулѐм, выдать соответствующее сообщение. подробнее

Показать сообщение отдельно
alaev
3 / 0 / 3
Регистрация: 11.10.2015
Сообщений: 10
16.10.2015, 09:35     Основы: указатель на объект или объект, что выбрать?
Тут надо просто понимать разницу.

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

Если в функции используешь указатель, а память выделяешь динамически, то пока не очистишь память сам, объект будет существовать.

Это и задаёт правила использования указателей или локальных переменных.
1. Если объект нужен только внутри функции, его делают локальным
2. Если объект передаётся снаружи и модифицируется в функции, его передают по указателю.
3. Если объект очень большой, то его тоже могут создавать по указателю, чтобы не допустить переполнения стека (в зависимости от компилятора размер стека может быть разный, можете ориентироваться на размер 2 мегабайта, но это не догма)

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