Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конструктор ссылки? https://www.cyberforum.ru/ cpp/ thread92331.html
StateManager.h class StateManager{ public: typedef long state_type; typedef void (*executor)(int); StateManager::StateManager(state_type mainState, executor newExec); private: executor exec; struct state_unit{
C++ zlib Двойное архивирование\разархивирование
Использую библиотеку zlib 1.2.3 Нужно сохранять массив объектов в файл и потом загружать её. Вес - 10 мегабайт. Решил сжать перед записью. Сделал... обнаружил что уже сжатый файл тоже бы мог сжаться хорошенько (60кб). Сжал кое как... получил 6кб. Отлично... Пытаюсь разжать дважды. Что то выходит, однако тест загруженого массива объектов в реальной программе показывает баги (этот массив...
C++ ОШИБКА Что за ошибка: Must use c++ for the type iostream?? https://www.cyberforum.ru/ cpp/ thread91688.html C++ пропадающее окно ещё раз здраствуйте. в предыдущий теме вы мне помогли https://www.cyberforum.ru/cpp/thread91603.html спасибо большое. но теперь у меня новая проблема. я использовал несколько програм втом числе и эту https://www.cyberforum.ru/cpp/thread89930.html в языке си. ошибок нет, но окно на секундо появляется и исчезает как-бутто эта программа ничего не делает. помогите пожалуйста. https://www.cyberforum.ru/ cpp/ thread91622.html
C++ Внешние объекты в классе
Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { private: HWND* _myWnd; public: MyClass(HWND* extWnd, ...) :_myWnd(extWnd); } Или нормально создать hWnd глобальным и в классе прописать extern?
C++ Выделение памяти https://www.cyberforum.ru/ cpp/ thread91503.html
MyClass& DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы к переменной можно было обращаться не по ссылке? delete &DXI; Это удалит выделенную память? Кроме того... если MyClass* pDXI; А потом в теле программы где либо: pDXI = new MyClass(); То можно ли в деструкторе класса написать так
C++ Как подключить .h файл дважды? https://www.cyberforum.ru/ cpp/ thread91267.html
Такая проблема: имеется файл lib.h и еще 2 файла: NewLib1.h и NewLib2.h, в каждый из которых включен предыдущий файл: #include "lib.h" Проблема возникает, когда я компилирую файл program.cpp #include "NewLib1.h" #include "NewLib2.h"
Borland не устанавливается на Windows 7 C++
Borland не устанавливается на Windows 7, в чем может быть проблема??
C++ Работа с другим консольным приложением https://www.cyberforum.ru/ cpp/ thread90817.html
у меня есть консольное приложение, которое выводит информацию на экран мне нужно написать программу которая запускала бы это приложение и считывала информацию с экрана Есть идеи? Заранее спасибо!
C++ ifstream / ofstream https://www.cyberforum.ru/ cpp/ thread90767.html
Доброго времени суток. И сразу к проблеме. Делаю вывод в файл объектов класса для их последующего считывания и обрабатывания. ofstream fout ("test.txt", ios::binary); fout.write((char*) &obj1, sizeof obj1); fout.write((char*) &obj2, sizeof obj2); fout.close(); ifstream fin ("test.txt", ios::binary); Object obj3
C++ Создание дерева в родительском классе
Базовый класс используется для создания дерева. Потомки обрабатывают дерево по разному. class A { public: A() { loadTree(); } loadTree()
C++ Генератор судоку Маленькая проблемка с программой - в одном из 10 случаев программа зависает. Кому не сложно, прошу проверить и исправить. Вот полный работающий код: #include <iostream> #include <cstdlib> using namespace std; https://www.cyberforum.ru/ cpp/ thread90576.html
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
04.02.2010, 19:04 0

delete void* - C++ - Ответ 525089

04.02.2010, 19:04. Показов 5887. Ответов 24
Метки (Все метки)

Ответ

Цитата Сообщение от insideone Посмотреть сообщение
Что произойдет если объект создастся в стеке (как локальная переменная)
Ни че хорошего..
Но можно маленько переделать...
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
71
72
73
74
75
76
77
78
#include <algorithm>
#include <iostream>
#include <vector>
 
class iref{
public:
    iref():count(1) { }
    virtual ~iref(){ count = 0; }
 
    virtual void release() { --count; if(!count)delete this; }  
    virtual void add()     { ++count; }
    //.......
    static void *operator new(size_t size)
    { 
        void *rhs = ::operator new(size);
        vec.push_back(static_cast<iref*>(rhs));
        return rhs;
    }
    static void clear_all(){
        for(std::vector<iref*>::iterator i = vec.begin(); 
            i != vec.end(); 
            ++i)
            (*i)->iref::release();
        vec.clear();
    }
protected:
    int count;
    static std::vector<iref*> vec;
};
 
std::vector<iref*> iref::vec;
 
class a: public iref{
public:
    a(): iref() { std::cout << "a(): iref()"  << std::endl; }
    virtual ~a(){ std::cout << "~a(): iref()" << std::endl; }
 
    virtual void release() {
        --count; 
        if(!count){
            vec.erase(std::find(vec.begin(), vec.end(), this));
            delete this;
        }  
    }
};
 
class b: public iref{
public:
    b(): iref() { std::cout << "b(): iref()"  << std::endl; }
    virtual ~b(){ std::cout << "~b(): iref()" << std::endl; }
 
    virtual void release() {
        --count; 
        if(!count){
            vec.erase(std::find(vec.begin(), vec.end(), this));
            delete this;
        }  
    }
};
 
int main(){
    std::vector<iref*> v;
 
    a *a1 = new a;
    a *a2 = new a;
    a *a3 = new a;
    b *b1 = new b;
 
    b st1;
    a st2;
 
    b1->release();
    a1->release();
 
    iref::clear_all();
 
    return 0;
}
http://codepad.org/IxVgO4NE

Цитата Сообщение от insideone Посмотреть сообщение
При таком методе все что хочется автоматически удалять должно наследоваться от iref ?
Автоматически удалять не будет.. можно просто все зачистить в том случаи когда больше ни один объект не нужен..

Для автоматического удаления есть умные указатели...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class x{
public:
    x() { std::cout << "x()"  << std::endl; }
    ~x(){ std::cout << "~x()" << std::endl; }
 
    void foo(){ }
};
 
int main(){
 
    std::auto_ptr<x> p_x(new x);
    p_x->foo();
    return 0;
}
http://codepad.org/bKOYRA6E

Вернуться к обсуждению:
delete void* C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2010, 19:04
Готовые ответы и решения:

Перенаправление из Void в другой Void
Решил я значит сделать себе терминал как в Fallout,и столкнулся с такой проблемой,из void нельзя...

Void * processor to (void(Args.) (*processor)
Здравствуйте. Имеем void* значением которого является адрес функции. Как скастить этот указатель в...

Где void?
Скорее всего тема опять будет пустовать, но я таки попробую. if ( __SETP__(_AH &amp; 0x44, 0) ) ...

delete vs. delete []
Всем привет, в разница использования delete и delete ? я читал, что delete используется для...

24
04.02.2010, 19:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2010, 19:04
Помогаю со студенческими работами здесь

Backspace и Delete
функция обрабатывает ввод символов 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, –. По нажатию клавиши Esc ввод...

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

Как написать это - void fastcall TForml:oOp(void)?
Добрый день! Подскажите пожайлуста: Как написать это - void fastcall TForml:: DoOp(void)? Как...

Void To Bool
Как можно void преобразовать в bool? if(Skype1-&gt;Attach(6, VARIANT_TRUE)) { ShowMessage(&quot;ERROR&quot;);...

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