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

"Анонимные" (временные) объекты? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив объектов класса http://www.cyberforum.ru/cpp-beginners/thread631783.html
class abc { public: int x,y; }; abc all; int main() { all.x=5; all.x=6;
C++ Пролетает cin >> Нужно заполнять вектор пока не введено 'x', потом сложить количество (введенное) первых элементов. После 'x' программа сразу завершается!!! . И еще вопрос как фильтровать ввод cin >> (число) от не числа. Спасибо!!! #include <iostream> #include <vector> using namespace std; int main() { vector<double> stream; http://www.cyberforum.ru/cpp-beginners/thread631775.html
C++ пишем свой троян с нуля
Всем привет)))соглашусь, что изобретаю велосипед, но хочется сделать все своими ручками не прибегая к open source и т.п. для повышения своего опыта в программировании на Visual C++ . Хочу, чтобы меня поставили на иснниный путь. Итак, цель - написание трояна, а именно кейлоггера) для получения пароля от vk.com. Погуглил , почитал мануалы парочку часов, узнал основные схемы проникновения троянов на...
C++ комманды с system("")
где можно найти описания всех комманд с system. пример system("PAUSE") или system("cls")
C++ Создайте двумерный массив целочисленный массив А[1..10], [1..7] и найдите сумму всех его элементов имеющие оба нечетные индексы. http://www.cyberforum.ru/cpp-beginners/thread631734.html
Создайте двумерный массив целочисленный массив А, и найдите сумму всех его элементов имеющие оба нечетные индексы. За ранее Благодарю
C++ Дан массив действительных чисел A[10]. Отсортировать по убыванию. Дан массив действительных чисел A. Отсортировать по убыванию. За ранее Благодарю подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2012, 22:15     "Анонимные" (временные) объекты?
Не, ну тут передаётся ссылка на этот временный объект (фактически, указатель). Без его копирования. Но есть ограничение: этот объект нельзя изменять. И он, конечно же, будет удалён (автоматически) из стека после выполнения функции, куда был передан.

Если именно настоящий указатель с правом изменять содержимое, то у вас всё верно: или (не анонимная) идиома
C++
1
2
3
4
5
T obj(42);
foo(&obj); // void foo(T *obj);
/* но внутри foo никаких delete obj, память
   вам не принадлежит, она очистится автоматом
   при выходе из функции, где это всё происходит */
или
C++
1
2
3
T obj(42);
foo(obj); // void foo(T &obj);
/* железобетонный вариант, но не анонимный */
или
C++
1
2
foo(new T(42)); // void foo(T *obj);
/* теперь внутри foo *надо* не забыть delete obj */
или (не указатель, но технически сойдёт):
C++
1
2
3
foo(T(42)); // void foo(T obj);
/* получаете личную копию, которая
   автоматически удалится из стека */
Но в последнем случае копирование лишнее, эта переменная же временная. В С++11 почили этот недостаток, можно написать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
struct T {
  int a, b;
  T(int a_, int b_) : a(a_), b(b_) {}
};
 
int func(T &&obj)
{
  obj.a = 10;
  obj.b = 20;
  return a * b;
}
 
int main()
{
  std::cout << func(T(2, 3));
  return 0;
}
И получить, надеюсь, то, что вам надо: объект T создаётся один раз; func получает на него указатель, а не копию; данные объекта можно менять; объект автомагически удалится из стека.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru