相关疑难解决方法(0)

为什么C++没有垃圾收集器?

我不是问这个问题,因为垃圾收集的优点首先.我提出这个问题的主要原因是我知道Bjarne Stroustrup已经说过C++在某些时候会有一个垃圾收集器.

话虽如此,为什么还没有添加?已经有一些垃圾收集器用于C++.这只是那些"说起来容易做起来难"的事情吗?还是有其他原因没有添加(并且不会在C++ 11中添加)?

交叉链接:

为了澄清,我理解为什么C++在第一次创建时没有垃圾收集器的原因.我想知道为什么收藏家不能加入.

c++ garbage-collection c++11

258
推荐指数
11
解决办法
15万
查看次数

C++中的垃圾收集 - 为什么?

我一直听到人们抱怨C++没有垃圾收集.我还听说C++标准委员会正在考虑将其添加到该语言中.我担心我只是没有看到它的意义...使用智能指针的RAII消除了它的需要,对吧?

我对垃圾收集的唯一经验是在几台便宜的80年代家用电脑上,这意味着系统每隔一段时间就会冻结几秒钟.我确信它从那时起已有所改善,但正如你可以猜到的那样,这并没有让我对此持高度评价.

垃圾收集为经验丰富的C++开发人员提供了哪些优势?

c++ garbage-collection c++11

46
推荐指数
11
解决办法
1万
查看次数

Java中的RAII ......资源处理总是那么难看?

我刚刚玩了Java文件系统API,并提供了以下函数,用于复制二进制文件.最初的源代码来自Web,但我添加了try/catch/finally子句,以确保在出现错误之前,在退出函数之前缓冲流将被关闭(因此,我的操作系统资源被释放).

我减少了功能以显示模式:

public static void copyFile(FileOutputStream oDStream, FileInputStream oSStream) throw etc...
{
   BufferedInputStream oSBuffer = new BufferedInputStream(oSStream, 4096);
   BufferedOutputStream oDBuffer = new BufferedOutputStream(oDStream, 4096);

   try
   { 
      try
      { 
         int c;

         while((c = oSBuffer.read()) != -1)  // could throw a IOException
         {
            oDBuffer.write(c);  // could throw a IOException
         }
      }
      finally
      {
         oDBuffer.close(); // could throw a IOException
      }
   }
   finally
   {
      oSBuffer.close(); // could throw a IOException
   }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我不能把这两个close()放在finally子句中,因为第一个close()可以抛出,然后,第二个不会被执行.

我知道C#有Dispose模式,可以使用using关键字来处理这个问题.

我甚至知道更好的C++代码(使用类似Java的API): …

java design-patterns raii resource-management

15
推荐指数
1
解决办法
4511
查看次数