草庐IT

C_Func_using_Func_ptr

全部标签

c++ - boost asio 和 shared_ptr 的扩散

我最近开始使用boost。到目前为止,大多数事情都非常简单。但是让我发疯的一件事是shared_ptr在整个boost过程中的扩散。即使在简单的示例中,也会使用shared_ptr。所以我的问题是,如果我使用boost来接受tcp连接然后处理它们。只要我保证在堆上创建的对象(boost::asio::ip::tcp::socket,以及将为异步方法回调的类)在我完成使用tcp之前不会被删除,那么我不需要shared_ptr对吗?我写了一个简单的tcp服务器和客户端,没有使用共享ptr,它可以工作。但我只是想要一些外部确认,以证明我的评估是正确的。此外,根据您的经验,您是否曾经需要使用s

使用 shared_ptr 到 const T 的 C++ 模板实例化

假设我有一个类templateclassA{public:templatevoidf(std::tr1::shared_ptr>v1,std::tr1::shared_ptr>v2){}};以下不编译:Aa;std::tr1::shared_ptr>v1(newstd::vector());std::tr1::shared_ptr>v2(newstd::vector());a.f(v1,v2);编译错误是:error:nomatchingfunctionforcallto'A,std::allocator>>::f(std::tr1::shared_ptr>>&,std::tr1::s

C++:直接使用函数返回 shared_ptr 的值是个坏主意吗?

例如:boost::shared_ptrtest(){boost::shared_ptrx(newint(3));returnx;}voidfunction(){inty=*test();...}使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的vector。 最佳答案 在一般情况下,不会。您的示例复制了shared_ptr的内容,然后删除了原始值。现在,这里更大的问题是为int进行动态内存分配效率极低,但我假设您没有在实际代码中这样做。:) 关于C++:直接使

c++ - 在这种情况下 unique_ptr 的行为应该是什么?

假设我有以下内容:std::unique_ptrpA;pA(newA);在这个复杂的例子中,pA(newA);的行为应该是怎样的?是吗?据我所知,在MSVC2010中,voidoperator()(T*)const;在new之后立即调用fromdefault_delete立即返回并删除指针。而g++(4.7.0)给了我nomatchforcall(std::unique_ptr)(A*)错误。 最佳答案 代码不应编译。std::unique_ptr不会重载operator()。VisualC++2011DeveloperPrevie

从基础到派生的 shared_ptr 的 C++ dynamic_ptr_cast 失败

这是我本周遇到的一个益智游戏。部分原因是我在编写了一段时间的Java代码后刚刚回到C++编码。给定以下代码:classBase{};classA:Base{public:virtualvoidrun(){coutptrToA=shared_ptr(newC());cout(ptrToA)run();assert(dynamic_pointer_cast(ptrToA));cout为什么会产生如下输出?PointertoA:0x1f29c010DynamicCastAptrtoC:0Running...ThisisC.tester-cpp:tester.cpp:89:intmain(in

c++ - std::unique_ptr<T> 不完整类型错误

我有templateclassqueue{private:structnode{Tdata;std::unique_ptrnext;//compileerroronincompletetypenode(T&&data_):data(std::move(data_)){}};std::unique_ptrhead;node*tail;public:queue():tail(nullptr){}我在VS10的标记行上遇到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板-构造函数-这里以int为例)?有解决方法吗?编辑singlethreadedqueue.h(62):e

c++ - OpenMP 和 C++ 并行 for 循环 : why does my code slow down when using OpenMP?

我有一个关于使用OpenMP(与C++)的简单问题,我希望有人能帮助我。我在下面提供了一个小示例来说明我的问题。#include#include#include#includeusingnamespacestd;intmain(){srand(time(NULL));//Seedrandomnumbergeneratorvectorv;//Createvectortoholdrandomnumbersininterval[0,9]vectord(10,0);//Vectortoholdcountsofeachintegerinitializedto0for(inti=0;i::iter

c++ - boost shared_ptr的底层设计

我想了解boostshared_ptr类的底层设计。我想将它“移植”到fortran(不要问)。我理解的一件事是引用计数由shared_count类持有。这提示了我一个问题。很久没用过C++了,也没用过boost。假设我分配了一个类X的实例,然后将它传递给两个不同的shared_ptr实例。据我了解,每个shared_ptr实例对另一个实例一无所知,因此两个shared_ptr实例都引用同一个X实例,同时保持引用计数为1。如果一个shared_ptr超出范围而另一个不超出范围,则X对象将被删除(因为引用计数降为零)并且剩余的shared_ptr将有一个悬空指针。为了保持shared_p

c++ - Qt(5) : Render same video on 2 different surfaces using QtMultimedia

我正在Qt(5)中开发一个应用程序,基本上我正在尝试使用QtMultimedia5将相同的视频源渲染到我窗口中的2个位置。我在QML中执行此操作,但如果有C++中的解决方案,我会很乐意改为实现它。我可以在窗口中显示视频。当我尝试使用相同的QMediaSource但将其渲染到2个窗口/控件时,问题就开始了。我看到正在发生的事情是QMediaService::requestControl被调用,它返回一个QVideoRendererControl对象。然后调用QVideoRendererControl::setSurface来设置它渲染视频的表面。因此,据我所知,QMediaService

c++ - vector<shared_ptr<T>> 和 vector<shared_ptr<const T>> 之间的高效转换

我有一个类:classX{vector>v_;public:vector>getTs(){returnv_;}};它有一个vector的shared_ptr类型T.出于某种原因,它需要公开一个方法来返回这个vector。但是,我不想修改vector的内容,也不想指向对象。所以我需要返回一个vector的shared_ptr.我的问题是,有什么有效的方法可以做到这一点吗?如果我简单地返回它,它可以工作,但它需要重建一个vector,这有点昂贵。谢谢。 最佳答案 你不能直接这样做-但你可以在你的容器上定义“View”,让你做一些非常相似