binary files – No puedo escribir un string muy largo en un archivo binario. C++

estoy tratando de escribir un string bastante largo (1658 caracteres) en un archivo binario

Cuando me enseñaron a leer y escribir archivos binarios me lo enseñaron de la siguiente forma:

string a="GGGGCATCCTGGGCCCAATCGCACATTCCAGGGAGGGATACCAGGGGCGTCGAGGGGCCGGCAAAGCGGAGGGAAAGCCTCTCGAGGCGGACTAGTGCCGCGCGCTGTCCGACCAAGGAACCTAAACAGTATTGGGTGAGGTGGCAAAGATCAGCAATGCAACAAGCAATGTGGGAGCGCTCGTAATGAAAACAGCAAAGCCACCCAGGGGATCGGGGCGACGTGAGCTAAACTGCATGTGTACCAGAAACTACCGCCCAGTATGTCTGATATGAACCAAACGACGACGCAACCCGCGCAAGGATGGAAAGAGGCCTGAGATCCGCACCCCGCAGGGGCACTAAAGCACCCTAACAAAGAGCACTGCAAAAATTGGCTAGCATAATACCATTTGATTAAGTAGCCCGCATTTGCACATCTGCCAGTGGACAGGCGCGCCTAGAACGCGGTCGTCACCATGAACGCGCCGACCGGCTTATGCGGACAGCGTAGCCATTGGGCGAGTAGCACGGTTCAGGGCGAATGAACAGTAGTGAAGACTGAGAAGCCCTCGAAAACTAAAAAGAACAGCGTTGAGTACTGCGAACGCGATATGAACGGATGCCAAAAACAGCAGACTCTATGGCAATATGCCAGGCGGACGAGTCTATAACTCCTGAGGCATCGAAGAGGGAACGCAAGCAACCTCTGACCGACGTTACCAAGGAGTGCCGTAGATATAGAAAACGCGGCAGGCAGGTTGGACGTTCAAGTGTCGTTGAGTAGCCGAACAGACCCGGTGCCAAGTTTAGGGGAAATAAAAATCAGCCCGCCCCGTCGCAAATTGGAGGAGAAGCGCACGCCCGGTTAACAATCGAATCGGGCCAGGGCGAGACACCCGAGGTCACCCGCAAACATAACACCTTTCATCAGAAGAGCGTCGCGAAGCCCGTGCGATGGGCCGACACAGTGCTATATCCATTGCTGTGGAGGTCTCAGATGAAAAGCAAGGACGTCGCAGCGCGGATCTACAAAAGGCATACCCCAGATATTTACAGTAGAGAGAGTCACATCAGCCCAGCGGCGACCGTGCAGATGTGTACCGCGCCACCGGTGTAAATGCTCGCACAACAACGGGCACGCCGTAAGGAGGAGTGTACTAGTACAATTACAGGCATCCGGGCAAATGAGCAGAAAACCACAGGCCAAGGAGAAACGGATGGGAATTCAGAGAACAATTTGAGGGAAGCTGTCGCCGGACGCCGGGTCAACCTGTACCATCAATGCGGGGGGGGGCGTTTCTAAAAGACGAAAAAGAGCCGCTGATCTTGAAGCGCACGACCGGTCGGCCTCTAGGAAAACCTGTCAGACACTGCTCGGCGGCTGGAAGTCAAGAGGCGTCACGCGAAGGCAGATGCGGTAGACACGACCATGACTCGTAACGTCCAAACCCAAGGAAAGCTAGGATGAAAGCCTCGATGGGCGAAGCAGGATGGAGCGCTGCAAGGGCGAAGCAACAGAAAGCGGAGAGCGGAGTAGGCAATTCAGTGTTGCCCGCTCGCGAGAGGGCTCCCAAGACAATGCGTACACAATGGGAGGAATGACTGCTTGCTCGAGGAAAACAAAACCTCCTAAAGAGCTTAGCCTGGTAATAGGAAATGTGTGTCTGCACGAGAAA";
ofstream out("Ejemplo.dat", ios::binary | ios::out);
out.write((char*)&a,sizeof(string)); //Aquí sinceramente no se si es sizeof(string) o sizeof(a)
out.close();

Se supone que de esta forma se escribe y de la siguiente se lee:

string b
ofstream in("Ejemplo.dat", ios::binary | ios::in);
out.read((char*)&b,sizeof(string)); //Aquí sinceramente no se si es sizeof(string) o sizeof(a)
out.close();

No sé cuál es el error, ya que cuando trata de hacer el proceso el string b queda vacío.
Tengo otra duda, si el objeto que quiero leer tiene un arreglo dentro, al hacerlo de esta forma se escriben los elementos que están dentro de la lista?