Конечно же обязательно не освобождается. А вот по второму пункту -- да запросто. #include <stdio.h>
char *newbuf = new char[42];
int main()
{
newbuf[0] = 'H';
newbuf[1] = 'i';
newbuf[2] = '!';
newbuf[3] = 0;
puts(newbuf);
}
.file "ne.cpp"
.text
.p2align 4,,15
.type _GLOBAL__I_newbuf, @function
_GLOBAL__I_newbuf: ; ---------------- сгенерирована функция вызова new для инициализации newbuf
subq $8, %rsp
movl $42, %edi ; ---------------------- вот его длина передаётся
call _Znam
movq %rax, newbuf(%rip)
addq $8, %rsp
ret
.size _GLOBAL__I_newbuf, .-_GLOBAL__I_newbuf
.section .ctors,"aw",@progbits
.align 8 ; --------------------- указатель на сгенерированную функцию
.quad _GLOBAL__I_newbuf ; --------------------- помещён в таблицу конструторов
.text
.p2align 4,,15
.globl main
; ------------------ ну main опускаем
.globl newbuf
.bss
.align 8
.type newbuf, @object
.size newbuf, 8
newbuf:
.zero 8 ; -------------------- а это сам _указатель_ newbuf