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

Геттеры создают объекты - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ прога для графикы http://www.cyberforum.ru/cpp-beginners/thread1011438.html
какая нужна программа для написания графики в С++?
C++ Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию. получилось вот что: #include <iostream> #include <stdlib.h> #include <time.h> #include <cstdlib> #include <iomanip> using namespace std; int main() http://www.cyberforum.ru/cpp-beginners/thread1011431.html
C++ Преобразование объектов одного класса в объекты другого
Есть сей код.Тут я пытаюсь осуществить преобразование объекта класса myCl к классу myCl2. Код вызывает завершение работы компилятора. В чем может быть проблема ? #include <iostream> using namespace std; class myCl //создаем класс 1 { int v; // 1на переменная целого типа public: myCl(){} //конструктор без аргументов myCl(int b) :v(b){}// конструктор с 1м аргументом operator...
C++ Удалить все цифровые символы из строки
Из строки нужно удалить все цифровые символы. Наработки пока такие: char* pIn = pTmp; char* pOut = pTmp; while (*pIn != '\0') { if (isdigit(*pIn)) while (isdigit(*pIn) && *pIn) { *pOut = *pIn; ++pIn;
C++ Почему не работает if-else http://www.cyberforum.ru/cpp-beginners/thread1011418.html
Привет, форумчане! Значицца, так, дано задание (опущу ненужное) задать диапазон массива от 1 до 20. >Если да, то выполнять следующее действие. >Если нет, писать "Error. Write again." "If" определяет на раз, что с "else"? #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main ()
C++ Прокоминтируйте строки задачи Всем привет, я тут пытаюсь освоить классы, у книге которой я пользуюсь приведен пример, но я его не совсем понимаю, пркоминтируйте все строчки пожалуйста. Ниже код задачи. #include <iostream> using namespace std; class myclass { // çàêðûòàÿ ÷àñòü myclass int a; public: void set_a (int num); int get_a () ; подробнее

Показать сообщение отдельно
stima
457 / 306 / 24
Регистрация: 22.03.2011
Сообщений: 996
Завершенные тесты: 2
19.11.2013, 00:59     Геттеры создают объекты
C++
1
2
3
4
5
6
7
template <class T> void add()
{
        T obj; // это я так понимаю ок?
        map<int, T>& mapSome=getMap<T>();
 
        mapSome[obj.getId()]=obj; // основной ньюанс здесь. 
}
Обьясню подробно:
1. std::map при вызове operator[key], если по данному ключю нет value, то она его создает с конструктором по умолчанию.
2. Далее вызывается конструктор копирования T (const T&). Именно конструктор копирования, а не оператор присваивания, так как происходит инициализация копированием.

Далее зависит от компилятора и его оптимизаций (почитайте про RVO и NRVO). Так вот, тут может действовать частичный случай. T obj больше негде не участвует, и в зависимости "от погоды на марсе", компилятор может это переписать как
C++
1
2
3
4
5
template <class T> void add()
{
        map<int, T>& mapSome=getMap<T>();
        mapSome[obj.getId()] = T();
}
Добавлено через 10 минут
Цитата Сообщение от stima Посмотреть сообщение
Далее зависит от компилятора и его оптимизаций (почитайте про RVO и NRVO). Так вот, тут может действовать частичный случай. T obj больше негде не участвует, и в зависимости "от погоды на марсе", компилятор может это переписать как
Код C++
1
2
3
4
5
6
7
template <class T> void add()
{
* * * * map<int, T>& mapSome=getMap<T>();
* * * * mapSome[obj.getId()] = T();
}
Подкоректирую сам себя. obj участвует (вызывается obj.getId()) оптимизации не будет.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru