Advertisement
chevengur

СПРИНТ № 7 | Модель памяти в C++ | Урок 3: Указатели. Открываем доступ к памяти 2/2

Apr 12th, 2024
776
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <cassert>
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. bool IsSameObject(T& value1, T& value2) {
  9.     if (&value1 == &value2)
  10.         return true;
  11.     return false;
  12.     /*Напишите тело функции самостоятельно */
  13. }
  14.  
  15. int main() {
  16.     using namespace std;
  17.  
  18.     const int x = 1;
  19.     const int y = 1;
  20.  
  21.     //x и y — разные объекты, хоть и имеющие одинаковое значение
  22.     assert(!IsSameObject(x, y));
  23.     // Оба аргумента — один и тот же объект
  24.     assert(IsSameObject(x, x));
  25.  
  26.     const string name1 = "Harry"s;
  27.     const string name1_copy = name1;
  28.     const string name2 = "Ronald"s;
  29.     auto name1_ptr = &name1;
  30.     const string& name1_ref = name1;
  31.  
  32.     assert(!IsSameObject(name1, name2));  // Две строки с разными значениями — разные объекты
  33.     assert(!IsSameObject(name1, name1_copy));  // Строка и её копия — разные объекты
  34.  
  35.     // Оба параметра ссылаются на одну и ту же строку
  36.     assert(IsSameObject(name1, name1));
  37.     assert(IsSameObject(name2, name2));
  38.     assert(IsSameObject(name1_copy, name1_copy));
  39.  
  40.     // Разыменованный указатель на объект и сам объект — один и тот же объект
  41.     assert(IsSameObject(*name1_ptr, name1));
  42.  
  43.     // Переменная и ссылка на неё относятся к одному и тому же объекту
  44.     assert(IsSameObject(name1_ref, name1));
  45.     // Ссылка на объект и разыменованный указатель на объект относятся к одному и тому же объекту
  46.     assert(IsSameObject(name1_ref, *name1_ptr));
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement