powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамически определить, имеет сложный тип или простой
9 сообщений из 9, страница 1 из 1
Динамически определить, имеет сложный тип или простой
    #38149050
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравсвуйте!

Пишу некое подобие буфера – менеджера памяти – пула памяти (не спрашивайте зачем и не предлагайте плз. буст, стл, и прочее такое- так надо) и вот хотел спросить. Можно ли как то динамически определить имеет ли конструктор или явлется ли объектом класса элемент передаваемый в ранее выделенную при помощи malloc для того что бы вызвать при помощи размещающего оператора new конструкторы передаваемых объектов ну и установить некий флаг что бы потом вручную вызвать деструкторы. Что то вроде (пример из википедии)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class A
{
public:
  A(int x){}
  ~A(){}
};
const int n = 50;
A* placementMemory = static_cast<A*>(operator new[] (n * sizeof(A)));
for (int i = 0; i < n; i++)
{
  new (placementMemory + i) A(rand()); //здесь память для объекта не выделяется, но инициализируется
}
//!!деинициализация памяти
for (int i = 0; i < n; i++)
{
  placementMemory[i].~A();
}
operator delete[] (placementMemory);



для простых типов такие конструкции то не нужны. Вот мне и нужно как то разделить код для объектов и для простых типов. Просто new не подойдет так как мне нужно выделть пул памяти, потом возможно изменять его размер итд. malloc, realloc подходит много лучше, сложности тока с объектами. Если динамичски определить нельзя придется передавть явно как параметр что вот мол объекты сейчас будем размешать а не хотелось бы городить лишних параметров.
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149119
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoder,

Можно ли как то динамически определить имеет ли конструктор или явлется ли объектом класса элемент передаваемый в ранее выделенную при помощи malloc

НЕТ


для того что бы вызвать при помощи размещающего оператора new конструкторы передаваемых объектов ну и установить некий флаг что бы потом вручную вызвать деструкторы.

Ты явно не тем занимаешься.
В C++ выделение памяти под объект и инициализация объекта разделены, и менеджеры памяти занимаются только первым, а втрое всегда делает компилятор (руками пользователь должен это делать только в случае placement new)

В любом случае менеджер памяти не должен такого делать. Во-первых, он для этого не предназначен, во-вторых, просто будут дважды вызываться конструкторы и деструкторы.
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149134
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем соглашусь. Если я определю буфер размера Н объектов класса то по идее в буфере должны размешатся проинициализированные экземпляры классов (объекты). Или я не прав?
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149152
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoderне совсем соглашусь. Если я определю буфер размера Н объектов класса то по идее в буфере должны размешатся проинициализированные экземпляры классов (объекты). Или я не прав?Так два разных действия: выделить память под массив, вызвать конструкторы без параметров. Код для второго компилятор сгенерирует самостоятельно и, насколько понимаю, способа ему это запретить (получив при этом компилируемый код) не существует.
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149169
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же не соглашусь - если вы выделяете память при помощи malloc то конструкторы не будут вызваны.
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149286
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoderдля простых типов такие конструкции то не нужны.не нужны, но возможны, синтаксис позволяет однообразно конструировать как пользовательские, так и встроенные типы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class A 
{ 
   A() {}
   A( int value ) {}
};
A a(), a1( 5 );

int i(), i( 5 );

всё это валидные конструкции, и сделано это специально, чтобы не надо было разделять код для объектов и простых типов.
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149320
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149692
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LowCoderОпять же не соглашусь - если вы выделяете память при помощи malloc то конструкторы не будут вызваны.

Правильно, это и есть единственный способ не вызывать конструкторы — не создать объекты вообще...
...
Рейтинг: 0 / 0
Динамически определить, имеет сложный тип или простой
    #38149759
Фотография tehKosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно для нужных классов вам лучше будет перегрузить оператор new, в котором память будет выделяться как раз из вашего пула или чего там у вас?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамически определить, имеет сложный тип или простой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]