[Mono-devel-list] C++/CLI and .NET 2.0

Jonathan Pryor jonpryor at vt.edu
Thu Jul 1 23:14:54 EDT 2004

On Thu, 2004-07-01 at 21:21, Michael Torrie wrote:
> If C++ programs are compiled to pure CLR apps, does that not mean that
> the guaranteed destruction semantics of C++ will not apply?

Remember the C++/CLI mantra: It Just Works.

>From a C#-programmers view of C++/CLI, destructors are mapped to an
IDisposable implementation, which are philosophically invoked from a
finally block.  This is also bi-directional: classes containing an
IDisposable implementation are seen as having destructors from within
C++/CLI.  This can make for elegant code.

Consequently, the C++/CLI code:

	String^ ReadFirstLineFromFile (String^ path)
		StreamReader reader (path);
		return reader.ReadLine ();

is identical to the C# code:

	string ReadFirstLineFromFile (string path)
		using (StreamReader reader = new StreamReader (path)) {
			return reader.ReadLine ();

This was taken from the MSDN Magazine article I referenced:


C++/CLI also adds new syntax to override the finalizer: !<classname>:

	public ref class Test {
		// Constructor
		Test ();

		// Destructor: mapped to IDisposable.Dispose()
		~Test ();

		// Finalizer: overrides Object.Finalize()
		!Test ();

The short of it is that existing C++ code should Just Work, unchanged,
within the CLI environment.

> If this is
> the case then there are many C++ apps that would require some work if
> they depend on this behavior (some of my C++ code depends on this).  I
> believe this is one big reason why C++ on .NET will never be a huge
> success.

I would suggest reading up on C++/CLI more before passing judgements
like this. :-)

You might find Stan Lippman's blog to be helpful, as he's the primary
author behind C++/CLI:


> Would compiling C++ via whirl allow this somewhat critical c++
> feature to work on .NET?

It would have to do the same thing (or similar) as C++/CLI.

 - Jon

More information about the Mono-devel-list mailing list