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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
apacen
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 3
#1

Работа с Умными указателями - C++

04.06.2012, 15:46. Просмотров 308. Ответов 4
Метки нет (Все метки)

Добрый день,
помогите разобраться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
class NormClass
{
    int a;
public:
    NormClass();
    void DoSomething();
};
 
NormClass::NormClass():a(5)
{}
 
void NormClass::DoSomething()
{
cout << a << "\n";
}
 
class ScopePtr1
{
    NormClass *t;
public:
    ScopePtr1(NormClass *nptr):t(nptr) {}
    NormClass *operator->() { return t;}
};
 
int main()
{
ScopePtr1 sptr = new NormClass();
sptr->DoSomething();
return 0;
}
Мне в этой коде не понятна вот эта инструкция:
C++
1
ScopePtr1 sptr = new NormClass();
В левой части объект ScopePtr1, в правой, как я понимаю создается объект NormClass в куче и возвращается указатель.
Как правильно понимать данную строчку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с Умными указателями (C++):

Работа с указателями - C++
Подскажите пожалуйста, зачем написано * Rad_to_deg void show_polar (const polar * pda) { using namespace std; const...

Работа с указателями - C++
Здравствуйте! Есть массив созданный ГСС. Надо написать функция которая вычисляет сколько в нем четных чисел, выделяет память под них и...

Работа с указателями - C++
1. Написать функцию, принимающую в качестве параметра указатель на первый символ строки и возвращающую адрес первого символа этой же...

Работа с указателями - C++
Написать программу, в которой выполнить следующие действия: 1) Описать указатели на все известные типы данных; 2. Выполнить для каждого...

Работа с указателями - C++
Помогите пожалуйста объяснить, не понимаю почему число присваемое через указатель *А в кавычках, и равны ли *А и просто А??? char *A =...

Работа с указателями - C++
Нужно чтобы при каждом попадании &quot;1&quot;, в введенной строке выводилось сообщение на экран. Запускается без ошибок, но после ввода строки...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
04.06.2012, 16:09 #2
C++
1
ScopePtr1 sptr = new NormClass();
эквивалентно
C++
1
ScopePtr1 sptr(new NormClass());
Добавлено через 5 минут
и память то ваш указатель не освобождает
apacen
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 3
04.06.2012, 16:16  [ТС] #3
Спасибо!
Я так понял, что эта сигнатура работает, потому что ScopePtr1 имеет конструктор, который принимает в качестве аргумерта класс NormClass?
Или все-таки ее нужно воспринимать по-другому?
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
04.06.2012, 16:22 #4
Цитата Сообщение от apacen Посмотреть сообщение
Я так понял, что эта сигнатура работает, потому что ScopePtr1 имеет конструктор, который принимает в качестве аргумерта класс NormClass?
Да, присвоения тут нет, можно убедиться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
class NormClass
{
    int a;
public:
    NormClass();
    void DoSomething();
};
 
NormClass::NormClass():a(5)
{}
 
void NormClass::DoSomething()
{
    cout << a << "\n";
}
 
class ScopePtr1
{
    NormClass *t;
public:
    ScopePtr1(NormClass *nptr):t(nptr) {
       cout << "constructor" << endl;
    }
    ScopePtr1 & operator =(ScopePtr1 const& other) {
        cout << "operator =" << endl;
        return *this;
    }
    NormClass *operator->() {
       return t;
    }
    ~ScopePtr1() {
        delete t;
        cout << "destructor" << endl;
    }
};
 
int main()
{
    ScopePtr1 sptr = new NormClass();
    sptr->DoSomething();
}
http://liveworkspace.org/code/5c09cf...8fb182dd56e6d0
apacen
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 3
04.06.2012, 16:46  [ТС] #5
Еще раз спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 16:46
Привет! Вот еще темы с ответами:

работа с указателями - C++
Помогите решить задачу в С++ (я в этом начиющий): 1)Из положительных значений двух целочисленных массивов различной размерности...

Работа с указателями - C++
Написать программу работы с указателями. LONG *p1; ULONG x = 5; LONG y = -1; LONG *p2 = p1 + 50; p2 = p2 + x * y; *p2 = 1; ...

Работа с указателями - C++
Всем здравия. Нужна ваша помощь. Есть задание по С++. К сожалению работала в основном по С# да и с указателями не совсем лажу. Может кто...

Работа с указателями - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void fun(int *p) { int *temp=new int; *temp=15; delete p; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.06.2012, 16:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru