c++-cli - 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)
,对吗?
解决方案
这可能std::string
取决于您的所有权意图。例如,最接近的 String^ 翻译(暂时忽略共享内存部分)将是 a std::string&
,它被称为 a reference
- 实际上是一个指针,但它们永远不会为空并且不能手动取消分配。一个类更有可能拥有std::string
成员(意味着它拥有该数据)而不是std::string&
成员(意味着它不拥有该数据)
函数签名的另一个问题是是否Foo
允许改变location
对象。如果不是,const std::string&
则应使用参数
它可能不像std::string*
“原始指针”在现代 C++ 中很少使用。您通常在堆栈上创建对象并使用引用传递它们,允许 RAII 管理内存 - 我肯定会阅读更多关于 RAII 的内容,它解释了所有权模型并且对于编写 C++ 非常重要
推荐阅读
- kubernetes-helm - Helm 能否根据 values.yaml 中的参数有条件地安装主图表
- javascript - 无法读取角度 9 中 null 的属性“推送”
- python - 图表未通过下拉选择 Dash Plotly python 更新
- c++ - 如何使用鼠标调整表单大小来调整对象的大小
- docker - Nginx 服务器内的 Docker 不支持 HTTPS?
- javascript - 如何编写表达式检查 null 并检查空值是否更短?
- java - Kafka 消费者 CommitFailedException
- java - 无法理解这个关于矩阵的编程问题?
- android - 生成签名APK时如何解决依赖关系
- java - onRestoreInstanceState 访问 kotlin 中的私有变量