0
respostas

A instanciação de string nunca chama o operador new sobrecarregado.

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)