Reputation: 2761
What are the most common or vicious mistakes when experienced C++ programmers develop in C#?
Upvotes: 19
Views: 4347
Reputation: 14004
One that got me, and I believe a lot of non C++ people too, was leaking memory due to registered events keeping an object alive.
IDisposable grated to begin with (and still does if I'm honest) but was pretty obviously going to be a difference when going from native to managed code so it is not something I'd expect C++ developers to actually fall foul of, they just won't like it.
Upvotes: 2
Reputation: 660148
Incidentally, the C# compiler has a number of heuristics in it for helping out the experienced C++ programmer who is a novice C# programmer. For example, if you say
int x[];
the compiler will helpfully point out that the [] is a part of the type in C#, so you probably meant
int[] x;
C# also allows things like putting unnecessary semicolons at the end of a class declaration so that C++ programmers who are in that habit don't get bitten by it.
Upvotes: 4
Reputation: 29490
Upvotes: 9
Reputation: 34396
using Hungarian Notation and other C++ naming conventions
private int m_iMyIntField;
class CWidget { ... }
Upvotes: 1
Reputation: 54734
Writing the full namespace each time.
This is fine in C++ when you're typing std::this
or boost::that
. Not so great in C# when you repeat System.Windows.Forms.Whatever
all over the place.
Upvotes: 4
Reputation: 54734
Confusing "pass by reference" and "reference type":
void GetAnArray(int input, ref string[] output);
(Compare with C++: void getAnArray(int input, std::vector<std::string>& output);
)
Upvotes: 5
Reputation: 54734
Thinking that "garbage collection" = "I never have to worry about object lifetime at all". For instance, opening a FileStream
and forgetting to close it.
Or:
Upvotes: 5
Reputation: 29332
I've seen many C++ coders code in a COM style in C#, trying to deal with the inadequacies of the language. C# provides lots of a type safe support for your enums and there are usually nicer APIs then P/Invoking back down to C++.
The other thing I've seen catch most people out is that C# generics are not templates.
Upvotes: 13
Reputation: 1672
Upvotes: 4
Reputation: 1062955
struct
and class
in the twousing
alias and a typedef
int
? (it is actually defined in C#)Upvotes: 26