C++:最强大的.NET语言之内存与资源
http://tech.ddvip.com 2007年04月09日 社区交流
本文详细介绍C++:最强大的.NET语言之内存与资源
using (SqlConnection connection = new SqlConnection("Database=master; Integrated Security=sspi"))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = "sp_databases";
command.CommandType = CommandType.StoredProcedure;
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
}对托管C++来说,情节也非常类似,也需要使用一个try-finally语句,但其是Microsoft对C++的扩展。虽然很容易编写一个简单的Using模板类来包装GCHandle,并在模板类的析构函数中调用托管对象的Dispose方法,但托管C++中依然没有C# using语句的对等物。
Using<SqlConnection> connection(new SqlConnection(S"Database=master; Integrated Security=sspi"));
SqlCommand* command = connection->CreateCommand();
command->set_CommandText(S"sp_databases");
command->set_CommandType(CommandType::StoredProcedure);
connection->Open();
Using<SqlDataReader> reader(command->ExecuteReader());
while (reader->Read())
{
Console::WriteLine(reader->GetString(0));
}想一下C++中对资源管理的传统支持,其对C++/CLI也是适用的,但C++/CLI的语言设计犹如为C++资源管理带来了一阵轻风。首先,在编写一个管理资源的类时,对大部分CLR平台语言来说,其中一个问题是怎样正确地实现Dispose模式,它可不像本地C++中经典的析构函数那样容易实现。当编写Dispose方法时,需要确定调用的是基类的Dispose方法--若有的话,另外,如果选择通过调用Dispose方法来实现类的Finalize方法,还必须关注并发访问,因为Finalize方法很可能被不同的线程所调用。此外,与正常程序代码相反,如果Dispose方法实际上是被Finalize方法调用的,还需要小心仔细地释放托管资源。
来源:天极开发 作者:谢启东 责编:豆豆技术应用
正在加载评论...