Скажем, у меня что-то вроде этого
extern "C" void make_foo (char** tgt) {
*tgt = (char*) malloc(4*sizeof(char));
strncpy(*tgt, "foo", 4);
}
int main() {
char* foo;
make_foo(&foo);
std::string foos{{foo}};
free(foo);
...
return 0;
}
Теперь я хотел бы избежать использования, а затем удалить буфер foo
.Т.е. я хотел бы изменить инициализацию foos
на что-то вроде
std::string foos{{std::move(foo)}};
и не использовать явное free
.
Оказывается, это на самом деле компилируется и, похоже, работает,но у меня есть довольно подозрительные чувства по этому поводу: действительно ли он перемещает определенную C-строку и правильно освобождает хранилище?Или он просто игнорирует std::move
и пропускает хранилище, как только указатель foo
выходит из области видимости?
Не то, чтобы я слишком беспокоился о дополнительной копии, но мне интересно, возможно линапишите это в стиле современной семантики движения.