A aula dá a entender que, sendo a string grande o suficiente, ela é alocada na heap, e portanto invoca o operador new. Mas eu não vejo isso ocorrendo quando eu rodo o código aqui:
#include <iostream>
#include <string>
using namespace std;
void* operator new (size_t bytes){
cout<< "Alocando " << bytes <<" bytes"<<endl;
return malloc(bytes);
}
int main(){
string str1 = "1234567890234567890123";
string* str2 = new string("1234567890234567890123");
return 0;
}
Não importa o tamanho do texto que eu ponha em str1, ele nunca vai entrar no operator new. Ela só entra quando eu instancio como um ponteiro, como é feito com str2. E também não importa o tamanho do texto que eu ponha em str2, ele sempre informa que alocou 32 bytes. Isso também é coisa de compilador/arquitetura? (estou compilando no VS code usando g++, em Windows 64 bits)