我有程序使用std::string
,但是memmove
std :: string`實例。在gcc中使用舊的std :: string
它工作正常,直到gcc 5.1。
但是,這不再起gcc 5.3的作用。我認爲開發者最終用內部指針做了SSO。
我肯定會解決這個問題,但有沒有簡單的方法來解決它的一些定義或編譯?
代碼類似於此:
// MyClass have std::string inside
MyClass *a = malloc(MAX * sizeof(MyClass));
// ...
// placement new on a[0]
// ...
memmove(&a[1], &a[0], sizeof(MyClass));
// ...
process(a[1]);
這是舊代碼,請不要評論有關malloc
使用。
我會重構或切換到std::vector
,但我希望代碼工作,直到我這樣做。
你真的應該做的不是強制編譯器使用你的代碼,而是重構你的代碼,以便它能夠與現代C++編譯器一起工作(並且我的意思是說過去15年左右) 。這意味着不使用'malloc'來分配對象,或者使用舊的C內存複製功能來複制對象。 –
我想要代碼工作,直到我重構。 – Nick
您可以在舊代碼編譯器的「真正位置」處重新構建新代碼 – dewaffled