将本地 CStringW 返回给调用者是否安全?
我有一个函数定义了一个在 CStringW 中键入的局部变量,通过值而不是通过引用将该对象返回给调用者是否安全?
I have a function defined a local variable typed in CStringW, is it safe to return this object to the caller by value, not by reference?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,应该没问题。
CString
内部使用带有引用计数的缓冲区并执行写入时复制,因此当您创建CString
的副本然后销毁原始对象时,一切都应该“只是工作”。Yes, it should be ok.
CString
internally uses a buffer with reference counting and does copy-on-write, so that when you create a copy ofCString
and then destroy the original object, everything should "just work".我相信 CString 来自 MFC,而不是 STL,因此您可能需要更改标签。
如果您从函数返回局部变量,则按值返回是安全的,但按引用返回不安全。按值返回有效地将字符串复制到调用者。通过引用返回为调用者提供了对局部变量的引用,该变量在函数返回时被销毁 - 因此调用者永远无法使用它,并且返回的引用始终无效。
I believe CString is from MFC, not STL, so you might want to change your tags.
If you're returning a local variable from a function, it's safe to return by value, but not safe to return by reference. Returning by value effectively copies the string to the caller. Returning by reference gives the caller a reference to the local variable which is destroyed when the function returns - so the caller can never use it, and the returned reference is always invalid.