Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23

Как получить объект (не указатель), используюя перегруженный new?

21.01.2013, 12:07. Показов 1301. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например, этот код показывает, что мы получаем указатель, а не объект. В итоге потом неудобный синтаксис ("->" вместо "."), невозможность использовать ссылки. Ну и главное: при выходе из функции не вызывается деструктор!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyClass
{
void* const hHeap;
int* Array;
 
public:
    MyClass(cint NumberArray_V, void* const hHeap_V): hHeap(hHeap_V) {Array = ::HeapAlloc((HANDLE) hHeap, NULL, NumberArray_V*sizeof(int));}
 
    ~MyClass() {::HeapFree((HANDLE) hHeap, NULL, (LPVOID) Array);}
 
    void* operator new(size_t count, void* const hHeap) {return ::HeapAlloc((HANDLE) hHeap, NULL, count);}
};
 
 
void Test(void* const hHeap)
{
    MyClass* p = new(hHeap) MyClass(5, hHeap); //указатель!!! А хочется иметь объект!
}
Как добиться и перегрузки оператора "new" и получение полноценного объекта?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2013, 12:07
Ответы с готовыми решениями:

Как получить указатель на объект класса CDocument
Как получить указатель на объект класса CDocument в любом месте программы? Например, функция ::AfxGetMainWnd()->GetMenu(); возвращает...

Как получить указатель на объект класса из списка std::list?
Как получить указатель на объект класса из списка list? Правильно ли list<Myclass> ::iterator it =Class.begin(); ...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать?
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

6
2893 / 1928 / 208
Регистрация: 05.06.2011
Сообщений: 5,662
21.01.2013, 13:13
Во-первых, сказал new -- говори и delete! ++ освобождение памяти не обеспечивает!
Во-вторых, ежли описываешь свой operator new -- пиши и operator delete.
В-третьих, operator new[] для выделенных объектов вызывает конструктор без параметров. Лучше написать хоть чего-нить.
0
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 13:58  [ТС]
iifat, delete я размеется напишу (уже написал).

Но смысла вопроса это не меняет: у меня вместо полноценного объекта указатель. Как получить полноценный объект?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
21.01.2013, 16:34
Цитата Сообщение от IvanPryamoy_2 Посмотреть сообщение
Как получить полноценный объект?
Что в Вашем понимании означает полноценный объект?
В принципе, вместо -> можете разыменовывать указатель и писать через точку
0
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 16:52  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Что в Вашем понимании означает полноценный объект?
В принципе, вместо -> можете разыменовывать указатель и писать через точку
Полноценный, это значит такой же как обычно. В общем создал ссылку на разъименованный указатель.
0
2893 / 1928 / 208
Регистрация: 05.06.2011
Сообщений: 5,662
21.01.2013, 16:57
Цитата Сообщение от IvanPryamoy_2 Посмотреть сообщение
у меня вместо полноценного объекта указатель
У тебя указатель на вполне полноценный массив предельно полноценных объектов. Получить объект из указателя можно, как уже сказали, разыменованием.
И, таки повторюсь: твой конструктор не вызывается потому что оператор new[] вызывает конструктор без операндов; деструктор не вызывается, поскольку нужно явно вызвать delete[] для указателя.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
22.01.2013, 02:51
Цитата Сообщение от IvanPryamoy_2 Посмотреть сообщение
Полноценный, это значит такой же как обычно.
И чем данный объект отличается от полноценного? Вы вообще представляете что такое объект?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.01.2013, 02:51
Помогаю со студенческими работами здесь

Как использовать перегруженный оператор [ ], если дан не сам класс, а указатель на него?
Это указатель на класс figure *f Это перегрузка оператора void figure::operator (int i) { cout << "("...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Получить указатель по ссылке на объект и наоборот
Подскажите, пожалуйста: 1. Как получить указатель на объект, имея ссылку на объект. 2. Как получить ссылку на объект, имея указатель на...

Как преобразовать ссылку на объект в указатель на этот объект?
Как преобразовать ссылку на объект в указатель на этот объект? Буду благодарен за помощь.

Как получить указатель на управляемый объект?
Как сделать такое на С#? А именно запретить управляемому объекту перемещаться по куче и получить на него указатель. array<int>^...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru