小编Ank*_*ria的帖子

C++ unique_ptr常量引用

我正在尝试使用unique_ptr将指针迁移到一个解决方案,以简化资源处理.我知道移动语义和使用std::move()unique_ptr的用法.

目前我有一个带签名的函数,int foo(const T2DMatrix* m)我使用动态分配的2D-Matrix对象来调用它.该函数foo只需要对T2DMatrix类进行只读访问,因此需要const参数.现在,我已将其迁移到int foo(unique_ptr<const T2DMatrix>& m).从另一个函数,process()它有一个unique_ptr<T2DMatrix>对象(使用工厂函数创建),我想将对象作为参数传递给foo.但是,编译器不允许我这样做.请注意,我不想将对象的所有权转移process()foo(),因此使用引用.调用foo()时unique_ptr<const T2DMatrix>工作正常,但是如果我更改函数签名则不会强制执行const保证.

注意:我发现的一个解决方案是unique_ptr<const T2DMatrix>在process()中创建一个新对象,unique_ptr<T2DMatrix>使用原始对象将所有权转移给它std::move(),将其传递给foo(),然后再次在process()中转移所有权.但这似乎不是理想的解决方案.

请建议等效的指针解决方案,它允许我将T2DMatrix*参数传递给const T2DMatrix*参数.我尝试使用msvc2012,msvc2013和g ++ 4.8,都具有相同的结果.

c++ pointers const unique-ptr c++11

8
推荐指数
1
解决办法
2599
查看次数

JDK7 NIO.2在Linux上使用Epoll等吗?

我正在研究不同语言的网络IO API的体系结构,并询问了如何在Java下实现Java中的Async IO API."旧"流IO API(1.4之前的版本)提供了同步阻塞读/写功能.JDK 1.4 NIO API使用epoll/select来测试IO就绪(通过SelectableChannel和Selector等向用户公开).这可能是Windows和*nix的情况.这是反应堆模式.现在,JDK7引入了NIO.2 API,其中包括提供异步API(主动模式),并使用内部(可配置)线程池在后台执行IO,并在完成后回调用户代码.它可能在Windows上使用IOCP,但我想知道:1.它在Linux上使用了什么,这是我感兴趣的主要平台.它是使用epoll和朋友,还是使用线程池来阻止IO?2. NIO.2中的实际IO(无论平台)是由Java线程池中的用户线程完成的,还是由内核线程完成的,而Java线程池线程只负责复制字节缓冲区并回调用户代码?

java asynchronous nio

7
推荐指数
1
解决办法
2439
查看次数

标签 统计

asynchronous ×1

c++ ×1

c++11 ×1

const ×1

java ×1

nio ×1

pointers ×1

unique-ptr ×1