0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 4
1

Можно ли так обходиться без конструкторов копий?

07.06.2017, 06:22. Показов 929. Ответов 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 using namespace std;
 class MyString {
 private:
 char* Buffer;
public:
 
    // Конструктор
 MyString(const char* Initiallnput)
        {
 if (Initiallnput != NULL)
 {
 Buffer = new char[strlen(Initiallnput) + 1];
 strcpy(Buffer, Initiallnput);
 }
 else
 Buffer = NULL;
 }
 
 // Деструктор
 ~MyString()
 {
     static int a = 0;
     a++;
 cout << "Invoking destructor, clearing up" << endl;
 if (Buffer != NULL)
     if(a<10)
 delete[] Buffer; 
 
 }
 
 int GetLengt()
 {
 return strlen(Buffer);
 }
 
 const char* GetString()
 {
 return Buffer;
 }
 
};
 
 void UseMyString(MyString Input)
 {
 cout << "String buffer in MyString is " << Input.GetLengt();
 cout << " characters long" << endl;
 
 cout << "Buffer contains: " << Input.GetString() << endl;
 return;
 }
 
 int main()
 {
 MyString SayHello("Hello from String Class");
 
 // Передать SayHello функции как параметр
 UseMyString(SayHello);
 
 return 0;
 }
по условию статической переменной
static int a = 0;
a++;
cout << "Invoking destructor, clearing up" << endl;
if (Buffer != NULL)
if(a<10)
delete[] Buffer;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2017, 06:22
Ответы с готовыми решениями:

Как настроить виндовс, чтобы можно обходиться без антивируса и фаервола?
Как настроить виндовс, чтобы можно обходиться без антивируса и фаервола? Какие решения для этого...

Зачем динамически выделять память если получается обходиться без этого?
При изучении динамического выделения памяти в си возник вопрос. Для каких задач нужно динамическое...

Можно ли упаковать в exe'шник используемые в проекте библиотеки так, чтобы можно было запустить программу на машине без .NET
Я погуглил, но нашел только очень дорогие программы. А хотелось бы узнать насчет предложенного мной...

Тип без конструкторов. Зачем?
Только что наткнулся на возможность оставить в коде вот такую конструкцию data T ладно допустим я...

4
С чаем беда...
Эксперт CЭксперт С++
9992 / 5344 / 1461
Регистрация: 18.10.2014
Сообщений: 12,862
07.06.2017, 06:25 2
Цитата Сообщение от SYPERTROLL Посмотреть сообщение
условию статической переменной
Что за белиберда и как это должно помочь "обходится без конструкторов копий"??? Что должно давать это "условие статической переменной"?

Код сразу же порождает неопределенное поведение, т.е. просто тупо падает на практике при попытке выполнить двойное освобождение памяти.
0
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 4
07.06.2017, 06:50  [ТС] 3
вот так
C++
1
2
3
if (Buffer != NULL)
     if(a==0)
 delete[] Buffer;
0
С чаем беда...
Эксперт CЭксперт С++
9992 / 5344 / 1461
Регистрация: 18.10.2014
Сообщений: 12,862
07.06.2017, 08:55 4
Цитата Сообщение от SYPERTROLL Посмотреть сообщение
вот так
C++
1
2
3
if (Buffer != NULL)
     if(a==0)
 delete[] Buffer;
Во-первых, почему сначала было a < 10, а потом вдруг стало a == 0? Вы что ли случайным образом меняете код?

Во-вторых, и что теперь получилось? Условие a == 0 в принципе невыполнимо, т.е. память просто тупо никогда не освободится. Нафига тогда было писать все эти if-ы и static-и?
0
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
07.06.2017, 09:56 5
Цитата Сообщение от SYPERTROLL Посмотреть сообщение
можно ли так обходится без конструкторов копий?
Использовать std::string вместо голого указателя.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 09:56
Помогаю со студенческими работами здесь

Работа с файлами без локальных копий
Помогите советом, пожалуйста. Суть: требуется обеспечить работников возможностью работы со своими...

Как обойтись без виртуальных конструкторов?
Я перехожу с Delphi. Многое там строится на виртуальных конструкторах, как без этого обойтись или...

Как сделать так, чтобы можно вводить только целые цифры, без запятых?
Задание: За номером дня месяца вывести на экран предыдущее число, если в месяце 31 день. так то...

Компилятор не дает написать main без int. Ошибка в книге, или в С так можно?
В книге И.Ш. Хабибуллина &quot;Программирование на языке высокого уровня C/C++&quot; во всех примерах пишут...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru