您如何在心理上处理从托管代码编写到非托管代码?

时间:2010-04-29 23:59:55

标签: c# c++

我编写的代码中有~80%是在C#中。另外~20%是C ++。每当我不得不从C#切换到C ++时,我需要花一点时间才能在思维方式上“转变”思维。我使用指针和内存分配做出简单的错误,这是我在大学时不会做的。调整期结束后,我很好,用本机代码写自然。

这是正常的吗?有没有其他人经历类似的事情,如果是这样,你怎么做才能减少这种浪费的时间?

编辑:我不是说我不能使用内存分配和指针。我经常在我的C ++代码中使用它们。只是在长时间使用C#之后不会立即。

12 个答案:

答案 0 :(得分:22)

我有同样的问题。我为Visual Studio使用完全不同的颜色方案(C ++的暗光照明; C#和VB的暗光照明)。

似乎可以帮助我的大脑缓解转变。

答案 1 :(得分:7)

列出在从一个切换到另一个时经常出现的错误的清单,并且每次都参考它。简单而有效。

答案 2 :(得分:7)

  

我使用指针和内存分配做出简单的错误,这是我在大学时不会做的。

嗯,这是你的问题。很好地学习C ++,看看如何避免搞乱指针和内存分配首先

然后在托管代码和非托管代码之间切换变得微不足道。

这对你来说只是一个问题,因为你在C#之间切换,你不需要担心任何事情,而C ++,你不太清楚,不能安全地使用

C ++中的内存管理并不困难。如果你弄错了,那是因为你还没有正确地学习它。在精心设计的C ++代码中,它根本不是一个问题。它会自动发生,就像在C#中一样。

答案 3 :(得分:4)

我一直这样做。我工作的c ++项目有几个方面可以减轻内存/资源的负担

a)使用RAII包装

b)系统地使用boost shared_ptr

这两件事情可以解雇并忘记对动态分配的东西进行编程(我们已经明确定义了每个人都知道的习语)

另外,我们有一个很好的调试库,用于执行锁,线程等

帮助很多

当然,我时不时地抱怨

  • C ++没有最后的尝试
  • c#没有确定性的析构函数

但是 - 嘿 - 这就是生活

答案 4 :(得分:2)

是的,很多学院和大学都没有指导学生进行资源管理,这太糟糕了。

如果你一直使用它,RAII会帮助你。

答案 5 :(得分:1)

慢慢来,仔细检查一下你的工作。一旦你回到凹槽中,你就会立刻加速。

答案 6 :(得分:1)

我感受到你的痛苦;当我去c# - > c ++我的代码就像我喝醉了。

我通常在潜入并开始之前阅读几页代码来启动开关。

答案 7 :(得分:0)

我自己经历过这个。它不仅仅是C#到C ++,还是设法不受管理。它发生在每一次变化。从VB转到VC ++,CC ++转到C#,C#转到VC ++,甚至c#转到VB.net时都遇到了这个问题(真实故事 - 礼貌';')。

唯一的调整时间不同......

答案 8 :(得分:0)

这是我在VB.NET中比在C#中做更多工作的原因之一。我不会忘记我所使用的语言。如果你有这个选择,我推荐它。在C#中你真的没有什么可以用VB.NET做的事情,而且完全不同的语法可以帮助我进行上下文切换。

答案 9 :(得分:0)

我必须始终将基于Oracle的SQL编码为基于Sybase的SQL。

我发现有帮助的是在我的辅助监视器上有相同的程序,其中包含所有好东西,简单的游标,proc设置,if-then语句......所有有效的代码都是那种语言,所以如果我忘记哪个环境有ELSIF或ELSE IF变体,我可以查看我的模板源来查找。

答案 10 :(得分:0)

每当我从C ++切换到Java时,我总是会想到内存的分配位置。我发现最简单的方法就是不要将内存视为托管内存...考虑它的发展方向,如果你用没有托管内存的语言编写它,请考虑将它发布到哪里。而且不要写你原本想要的代码行。

答案 11 :(得分:0)

从一种语言切换到另一种语言时出现问题是正常的。 C#似乎与C ++足够接近,但实际上并非如此。

但请记住,在“现代”C ++中大多数时候你都不会使用内存管理。它会对你隐藏,所以通常我不会处理很多指针(最糟糕的是智能指针)。但我知道它们是如何工作的。你也应该这样做,也许你需要一些练习,正如另一位参与者所说,C语言是正确的。

但是在C ++中还有一些东西,比如模板,算子,算法,流,需要一些思考,因为它不像你以前那样使用java-C#。当然还有标准模板库的使用并最终提升。

但是,“好”的C ++开发人员应该知道为什么他不使用指针:)