2010-08-10 2 views
1

У меня есть функция, определяющая локальную переменную, введенную в CStringW, безопасно ли вернуть этот объект вызывающему по значению, а не по ссылке?Можно ли вернуть локальный CStringW вызывающему абоненту?

+0

Обратное на самом деле то, что небезопасно; не возвращайте ссылку на локальную переменную, потому что когда она выходит из области действия, ваша ссылка мертва. – GManNickG

ответ

2

Да, должно быть все в порядке. CString внутренне использует буфер с подсчетом ссылок и копирует-на-запись, так что, когда вы создаете копию CString, а затем уничтожаете исходный объект, все должно «просто работать».

1

Я считаю, что CString - это MFC, а не STL, поэтому вы можете изменить свои теги.

Если вы возвращаете локальную переменную из функции, ее можно вернуть по значению, но не безопасно возвращаться по ссылке. Возврат по значению эффективно копирует строку вызывающему. Возврат по ссылке дает вызывающей стороне ссылку на локальную переменную, которая уничтожается при возврате функции, поэтому вызывающий абонент никогда не сможет ее использовать, а возвращаемая ссылка всегда недействительна.