首页 > 解决方案 > C++/CLI System::String^ 对应的 C++ 原生类型是什么

问题描述

我需要通过删除或替换托管代码将 C++/CLI 项目重写为本机 C++ 项目。我对 C++/CLI 不是很熟悉,那么 C++/CLI 对应的 C++ 原生类型System::String^std::string什么std::string*

比如一个 C++/CLI 函数Foo(System::String^ location),重写为Foo(std::string location),对吗?

标签: c++-cli

解决方案


这可能std::string取决于您的所有权意图。例如,最接近的 String^ 翻译(暂时忽略共享内存部分)将是 a std::string&,它被称为 a reference- 实际上是一个指针,但它们永远不会为空并且不能手动取消分配。一个类更有可能拥有std::string成员(意味着它拥有该数据)而不是std::string&成员(意味着它不拥有该数据)

函数签名的另一个问题是是否Foo允许改变location对象。如果不是,const std::string&则应使用参数

它可能不像std::string*“原始指针”在现代 C++ 中很少使用。您通常在堆栈上创建对象并使用引用传递它们,允许 RAII 管理内存 - 我肯定会阅读更多关于 RAII 的内容,它解释了所有权模型并且对于编写 C++ 非常重要


推荐阅读