一个有关VC中managed code和unmanage code传递参数的问题

Scorpiour 2013-09-01 06:28:12
以前在做.neet开发的时候一直在用C#,最近开始转移到VC/clr上,开发时突然意识到一个不大不小的疑点:

代码如下:

[code=c/c++]
//Form COM的Event代码,使用的是Managed Code

private: System::Void textBox2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
if(e->KeyChar == 13)
{
if(this->textBox2->Text->Length)
{
entryPtr->SendAsyncMessage(this->textBox2->Text);

this->textBoxSending->AppendText(this->textBox2->Text);
this->textBoxSending->AppendText("\n");
this->textBox2->Clear();
}
}
}

//Unmanaged部分的代码,将System::String转换成wchar_t数组

int CommModelBase::SendAsyncMessage(System::String^ s)
{
int len = s->Length + 1;
wchar_t* str = new wchar_t[len];

memset(str,0,len*sizeof(wchar_t));

for(int i=0;i<s->Length;i++)
{
str[i] = s[i];
}

//blabla其他代码

return 0;
}

[/code]


这段代码在使用中一切OKAY,但是有一个问题我一直没有想明白:


众所周知C#中类似的代码是完全通过引用进行传递的,但是在C++中传递给函数的参数需要用&来修饰引用传递。虽然System::String属于Managed部分,但是我很好奇在这个传递过程中:

1. 这个传递过来的参数是引用参数还是复制了一个新的实例
2. 假如是引用传递,我在什么地方将容器Lock()比较好;假如是值传递,那么由于gcnew的缘故,我是否可以像C#一样完全不考虑delete[]的问题?


求赐教
...全文
95 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Scorpiour 2013-09-02
  • 打赏
  • 举报
回复
bump一下 自己通过调试解决了。是值传递,在退出function的时候会自动dispose();

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧