1

Тема: Видалення static char* в класі?

Добрий день

Маю такий клас

class myChar{
 private:
  char value;
  unsigned int pos;
  static char* list;
  static int count;
  myChar* begin;
 public:
  myChar();
  ~myChar();
};

Виникло таке питання чи потрібно видаляти  static char* list в деструкторі класа і як це зробити?
Як видалити цей СТАТІК?

2

Re: Видалення static char* в класі?

Ніяк. Бо ви його ще й не створили.
static означає, що змінна знаходиться в конкретному місці, одному для всіх екземплярів. З цього, по-перше, випливає, що не можна виділяти пам'ять для такої змінної в конструкторі і знищувати в деструкторі, бо екземплярів (і, відповідно, викликів конструкторів/деструкторів) буде багато, а змінна list - одна; а по-друге (і це в C++ дійсно дуже неочевидно) - що в цьому коді не виділяється пам'ять для жодної статичної змінної. Ще треба в одному з .cpp файлів проекту додати проголошення

static char* myChar::list = NULL ;

чи якось так. Якщо файл один - то можна після проголошення класу. А видаляти його треба в якійсь процедурі, яка викликатиметься під кінець роботи програми. А ще можна його виділяти не через вказівник і new, а через shared_ptr і make_shared, чи зробити std::string чи ще якось. І взагалі - розкажіть, нащо ви таке робите, то ми вам більше порадимо.

Подякували: 0xDADA11C7, Arete2

3

Re: Видалення static char* в класі?

Просто мені потрібно перегрузити оператор ++ типу char, а так як це не клас то я створив клас myChar це як обгортка типу char.

char a = 'A';
++a; отримаємо 'B'

А я хочу змінювати змінну оператором++ на свій розсуд. В мому випадку з масива list;
Тай зробити змінну list static-ом допоможе заощадити память.

4

Re: Видалення static char* в класі?

А в який момент створюється цей масив? Не в конструкторі ж, конструктор у вас дефолтний.

5

Re: Видалення static char* в класі?

Якщо так написати?
extern char* myChar::list;

6 Востаннє редагувалося Lokki (27.02.2015 22:28:56)

Re: Видалення static char* в класі?

Створю масив напевно в окремій функції.

7

Re: Видалення static char* в класі?

Це питання ви можете задати не на форумі, а безпосередньо своєму компілятору. Якщо отримаєте щось неочікуване, скажіть тут. Я вангую, що буде повідомлення про помилку зв'язування.

8

Re: Видалення static char* в класі?

Та ні всe норм.

Тільки з масивчиком невеличка проблемка:
initializer-string for array of chars is too long [-fpermissive]
const char symbols[countEl+1] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJ"

Я думав що рядок може бути доввільної довжини?

9

Re: Видалення static char* в класі?

Я протупив там все працює

10

Re: Видалення static char* в класі?

Останнє питаннячко можна?

Ви з допомогою чого пишите віконні програми?

11

Re: Видалення static char* в класі?

koala використовує Qt

12

Re: Видалення static char* в класі?

Якщо чесно, то останні два місяці - Borland C++ Builder. Шостий. Старий проект, дуже старий, написаний програмістами old school... Дуже старої... з глобальними змінними, goto, копіпейстом в усіх функціях, а про милиці і велосипеди годі й казати.

13

Re: Видалення static char* в класі?

koala написав:

Якщо чесно, то останні два місяці - Borland C++ Builder. Шостий. Старий проект, дуже старий, написаний програмістами old school... Дуже старої... з глобальними змінними, goto, копіпейстом в усіх функціях, а про милиці і велосипеди годі й казати.

Троха не в тему

А вони використовують там юніт цілком із глобальними зміними? чи все розкидане по всім юнітам?

14

Re: Видалення static char* в класі?

Прихований текст
Chemist-i написав:
Троха не в тему

А вони використовують там юніт цілком із глобальними зміними? чи все розкидане по всім юнітам?

95% - в одному юніті.

Подякували: Chemist-i1

15

Re: Видалення static char* в класі?

До речі, якщо хто хоче побачити якісний одлскул код - об’єктні чисті ся або більш процедурний стиль в плюсах, то погляньте на джерельні коди від id software

16

Re: Видалення static char* в класі?

0xDADA11C7 написав:

До речі, якщо хто хоче побачити якісний одлскул код - об’єктні чисті ся або більш процедурний стиль в плюсах, то погляньте на джерельні коди від id software

Згадав це, Кармак сам в шоці =)