Скачиваний:
190
Добавлен:
05.07.2021
Размер:
16.53 Mб
Скачать

13. Использование ключевого слова auto. Примеры использования.

Начиная с C++11, ключевое слово auto при инициализации переменной может использоваться вместо типа переменной, чтобы сообщить компилятору, что он должен присвоить тип переменной исходя из инициализируемого значения. Это называется выводом типа (или ещё «автоматическим определением типа данных компилятором»).

auto intPtr1 = make_shared<int>(42);//объект, на который указывает intPtr1 имеет только одного владельца auto

auto objCar = 5; // будет выбран тип int, т.к. инициализируем целое число

14. Классы, ресурсы которых имеют динамическую продолжительность существования. Случаи их использования. Совместное использование данных двумя объектами. Примеры использования.

Обычно динамическую память используют в следующих случаях.

1. Неизвестно необходимое количество объектов.

2. Неизвестен точный тип необходимых объектов.

3. Нельзя разрешать совместное использование данных несколькими объектами.

Классы контейнеров — хороший пример классов, использующих динамическую память, как в первом случае.

При копировании вектора элементы исходного вектора копируются в независимые элементы другого вектора. Элементы вектора существуют только пока существует сам вектор. Когда вектор удаляется, удаляются и его элементы.

#include <vector>

#include <iostream> #include <string> using namespace std; int main() {

vector<string>dictionary;//пустой вектор

{//новая область видимости

vector<string> partsSpeech = {"NOUN", "PRONOUN", "VERB", "ADJECTIVE", "ADVERB", "PREPOSITION", "CONJUNCTION", "INTERJECTION"};

dictionary = partsSpeech;//копирует элементы из partsSpeech в dictionary

}//partsSpeech удаляется, что удаляет элементы partsSpeech

//dictionary содержит элементы, являющиеся копиями элементов partsSpeech

for (vector<string>::iterator i = dictionary.begin();

i != dictionary.end(); i++)

cout <<*i <<" ";

}

Существуют классы, которые резервируют ресурсы, продолжительность жизни которых не зависит от первоначального объекта.

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

Самый простой способ реализации нового типа коллекции (контейнера или массива) в С ++ подразумевает использование контейнеров STL. Она позволяет делегировать управление динамической памятью исполняющей среде С++.

//Совместное использование данных двумя объектами

#include <iostream> using namespace std; template <typename T>

class Order {

T* products; public:

Order() { products = new T[10]; }

Order(T product1, T product2) {

this->products = new T[2];

this->products[0] = product1;

this->products[1] = product2;

}

T getProduct(int index) {

return products[index];

}

};

void main() {

Order<string>order1;//пустой объект класса Order

{ //новая область видимости

Order<string> order2 = Order<string>("Product1",

"Product2");

order1 = order2;//order1 и order2 совместно используют одни и те же элементы

}//order2 удаляется, но элементы order2 нет

//order1 указывает на элементы, первоначально созданные в order2

for(int i=0;i<2;i++)

cout <<order1.getProduct(i)<<endl;

}