тогда скажите мне как присвоить адрес первого элемента переменной text, а не ее адресу
const char **text;
- это определение переменной text
с типом модифицируемого указателя на модифицируемый указатель на константный символ.const char *smth = "some";
- это определение переменной smth
с типом модифицируемого указателя на константный символ. Переменная инициализируется адресом размещения строкового литерала "some"
.text = &smth;
- у переменной smth
берется адрес. Это будет значение с типом const char **
.malloc
память, тебе стоит и оперировать с указателями соответствующим образом.text
, т.е. *text
, будет иметь тип const char *
. Этот тип уже согласуется с типом smth
.*text = smth;
- вот так ты запишешь адрес размещения литерала в выделенную через malloc
память, которую ниже и сможешь удалить через free
. text = &smth;
std::unique_ptr<const char* []>
и вообще не иметь дело с new
и delete
. GetInstance( index ) = T{ std::forward<Args>( args )... };
T* instance = &GetInstance( index );
instance->~T();
new( instance ) T{ std::forward<Args>( args )... };
new
в никуда, который рискует быть вырезанным в результате оптимизации и явный вызов деструктора - это проще? std::aligned_storage
. buffer[sizeof(T) * head]
давай подскажу еще один подход.struct alignas( 16 ) Vector2 final
{
float x;
float y;
};
sizeof(T) * head
найдет для него неправильное место, не выравненное. А ведь выравнивание может быть и на 64, и на 128, и на 256 байт.std::aligned_storage
{?] в качестве ячейки своего ЦБ. if (size < maxSize)
и для чего существует второй - который под первым.size
и maxSize
. А так же - почему функция называется add
и имеет такие параметры.
Все авторы подобных вопросов и слыхом не слыхивали о том, что AOT или JIT в современном пыхе, яве, шарпе и так далее полностью нивелирует разницу все с тем же кодом на C/C++.
И решать начинает действительно скорость разработки и цена ошибки.