Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127

Delete void* p = new classobject();

18.10.2013, 21:21. Показов 3628. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго вечера! Возник вопрос, подскажите пожалуйста. Допустим:
C++
1
2
void* p = new classobject();
delete p;
Как компилятор узнает сколько памяти нужно освободить ? Будут ли утечки после освобождения через delete p, без приведения void* к конкретному типу ?

Добавлено через 2 часа 1 минуту
То есть в таком случае всегда необходимо удалять после приведения типа
C++
1
2
3
void* p = new classobject();
classobject* pObj = (classobject*) p;
delete pObj;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2013, 21:21
Ответы с готовыми решениями:

delete или new (typeid(void*))(void*)
Доброе время суток. Пишу список. Телом каждого элемента (el) списка является void указатель(body). (предполагается что тело элемента...

Delete void*
Безопасно ли удалять указатель на тип void. Допустим есть такой код: void * ptr = new char; delete ptr; Освободится ли...

error C2440: 'delete' : cannot convert from 'Song' to 'void *'
Строка, где выдаётся ошибка: delete mas; Деструктор: Song::~Song () { delete song; delete perf; delete desc; }

47
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 00:23  [ТС]
Студворк — интернет-сервис помощи студентам
ValeryS, Это если пользовательские типы позволяют объединение в иерархию. А у меня в качестве данных может быть любой тип: встроенный тип, разные не связанные между собою наследованием классы

Добавлено через 4 минуты
castaway, изначально в начале поста, был описан класс. И там же информация о типе хранится как enum
К концу поста пришли к тому что нужно, это как то это улучшить, с помощью шаблонов.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
19.10.2013, 00:26
Я так понимаю, что кто-то хочет сделать type-erasure и прийти к boost.any ?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
19.10.2013, 00:27
Цитата Сообщение от ArkTaS Посмотреть сообщение
ValeryS, Это если пользовательские типы позволяют объединение в иерархию. А у меня в качестве данных может быть любой тип:
сделай базовый класс размером с байт, в конце концов все к байтам приводится
типа такого
C++
1
2
3
4
5
class MyAbstract
{
unsigned char dt;
virtual ~MyAbstract();
}
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 00:33  [ТС]
Jupiter, Будьте так любезны перефразируйте свою фразу еще раз
Цитата Сообщение от Jupiter Посмотреть сообщение
да, и все инстансы шаблона должны наследоватся от базового не шаблонного класса
.
Если вы имели ввиду создание иерархия для хранения объектов типов этой иерархии то это не подходящий вариант. Так как контейнер должен хранить не связанные между собой наследованием типы.

Добавлено через 22 секунды
ct0r, да boost/any

Добавлено через 4 минуты
ValeryS,Из за наличия одних только вирт. ф-й он будет занимать 4 байта. И не понятно как это поможет связать встроенные типы(int, double,float ) и разные польз. типы.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
19.10.2013, 00:33
Цитата Сообщение от ArkTaS Посмотреть сообщение
да boost/any
А в чем тогда загвоздка? Код буста в свободном доступе.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.10.2013, 00:34
Цитата Сообщение от ArkTaS Посмотреть сообщение
Если вы имели ввиду создание иерархия для хранения объектов типов этой иерархии то это не подходящий вариант. Так как контейнер должен хранить не связанные между собой наследованием типы.
для пользователя контейнера типы будут не связанными между собой наследованием, а как оно реализовано внутри пользователя не касается
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 00:36  [ТС]
ValeryS, какой то рабский труд получится
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
19.10.2013, 00:41
Цитата Сообщение от ArkTaS Посмотреть сообщение
ValeryS,Из за наличия одних только вирт. ф-й он будет занимать 4 байта.
не факт
зависит от разрядности
Цитата Сообщение от ArkTaS Посмотреть сообщение
И не понятно как это поможет связать встроенные типы(int, double,float ) и разные польз. типы.
свои типы вводить
а иначе никак, по моему
посмотри как это сделали в Qt или cli
все что не ихние типы.не поддерживается в полном объеме, например нет автоматического удаления

может тебе переписать new\ delete
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
19.10.2013, 00:48
Да в целом понятно, как все внутри устроено. Когда делаем присваивание переменной any значения переменной типа Т, то создается некий holder<T>, который наследник от некого общего базового класса. У него есть виртуальные функции для получения type_info. А при присваивании обратно просто идет сравнение typeid(T) c сохраненным type_info. Чтобы влезть в детали, надо почитать исходники.
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 00:49  [ТС]
ValeryS, а как в Qt называется подобный контейнер ?

Добавлено через 1 минуту
ct0r, С утра почитаю на свежую голову. Всем спокойной ночи !
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.10.2013, 01:07
Цитата Сообщение от Jupiter Посмотреть сообщение
в с++ это может быть только для развлекухи, шаблоны же есть.
не согласен. Можно создать класс, оперирующий сырой памятью и от него обертку класс-наследник, который следил бы за контролем типов (привет private наследованию).

Добавлено через 3 минуты
Кстати, класс-обертку логично было бы сделать шаблонным.
Подробно данная махинация рассматривается у Мейерса в книге "Эффективное использование С++. 50 рекомендаций ..." в правиле 42. Помню меня при прочтении этот прием очень сильно впечатлил
0
19.10.2013, 01:08

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
привет private наследованию
Цитата Сообщение от MrGluck Посмотреть сообщение
не согласен.
еретик. на костре тебе гореть
Кликните здесь для просмотра всего текста
:D

0
19.10.2013, 01:13

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
еретик. на костре тебе гореть
Ну вот, теперь буду думать о себе как о Джордано Бруно.

0
19.10.2013, 01:16

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
теперь буду думать о себе как о Джордано Бруно.
финал его помнишь?:)

0
19.10.2013, 01:16

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
финал его помнишь?
конечно, умел парень зажигать

0
19.10.2013, 01:18

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
конечно, умел парень зажигать
Эт, точно:D

0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 16:36  [ТС]
Jupiter, MrGluck, Вот простенький вариант, минимум кода, для общего представления. Подскажыте как реализовать вирт. функцию что будет возвращать данные элемента(узла).
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
63
64
65
66
67
68
69
70
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
 
class Baselink
{
public:
 
   Baselink* next; 
   //virtual int getData() {return 1;}
   virtual void showElem()=0;
   virtual ~Baselink(){}
};
...........................................
template<class T>
class link: public Baselink
{
public:
   T data; 
   void showElem(){ cout<<" "<<data;}
   //virtual T getData() { return data;}
};
...........................................
class linklist 
{
private:
   Baselink* first;
public:
 
   linklist() { first = NULL; } 
   template<class T> void additem(T d); 
   void display(); 
};
...........................................
template<class T>
void linklist::additem(T d) 
{
   Baselink* newlink = new link<T>;
   link<T>* p = dynamic_cast<link<T>*>(newlink);
   p->data = d; 
   p->next = first; 
   first = p; 
}
...........................................
void linklist::display()
{
   Baselink* current = first;
   while(current) 
   {
      current->showElem();
   //cout << current->getData() << endl; 
   current = current->next; 
   }
}
...........................................
void main()
{
   setlocale( LC_ALL,"Russian" );  
 
   linklist li; 
   li.additem(25); 
   li.additem("Lana");
   li.additem(49.3);
 
   li.display(); 
 
   cout<<endl;
   system("pause");
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.10.2013, 16:51
Цитата Сообщение от ArkTaS Посмотреть сообщение
Подскажыте как реализовать вирт. функцию что будет возвращать данные элемента(узла).
если ты задаешь этот вопрос то ты ещё не понял задание.
как этот список будет использоватся, в том числе и эта "вирт. функцию что будет возвращать данные элемента(узла)" ??
0
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
19.10.2013, 17:11  [ТС]
Jupiter, Я уже давно ушел от конкретного задания. И в посте пишу о реализации контейнера с разными типами элементов. Следуя вашему совету привел в последнем сообщении код реализующий это. Теперь проблема стоит в необходимости расширения функционала контейнера. Необходимо как то получать данные любого из элементов. Как видите комментариями помечена вирт. ф-я возвращающая значение, но она работать не будет
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.10.2013, 17:21
ArkTaS, повторяю вопрос - как ты будешь использовать эту функцию?
C++
1
2
3
4
5
linklist li; 
li.additem(25); 
li.additem("Lana");
li.additem(49.3);
li.getElementAt(...) //что должна примать эта функция? и что она должна возвратить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2013, 17:21

Ошибка cannot convert from type void*(classname::) () to type void*(*)(void*)
Подскажите пожалуйста как избавиться от ошибки? Есть ещё какой-либо способ, кроме как объявить thread_func как static? Можно конечно...

Void menu(void); что это ? почему не void menu();
void menu(void); что это ? почему не void menu(); void naprimer(void); и это идет в классе это вообще правильно так писать ?

delete void*
class MyClass{ public: int i; }; void main() { MyClass* MyObj = new MyClass; MyObj-&gt;i = 10; void* VoidLink =...

Функция void delete". Требуется идентификатор
В общем, ругается на функцию void delete, не понимаю почему. Помогите исправить. #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

Ошибка E2044 - operator delete must return void
Среда - С++ Builder 2006 Суть такова: Только начали изучать сишку. Выполняю домашку, нужно составить форму с кнопкой и вычисляемым...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru