草庐IT

c++ - 使用 C++11 智能指针时,你能忘记 Checked-Delete 吗?

我读过unique_ptrwithincompletetypes关于CheckedDelete.但是,在使用智能指针或至少是C++11智能指针的一个子集时,checked-delete是否过时了?采用以下代码:classA;classB{public:std::auto_ptrautoPtr;std::unique_ptruniquePtr;std::shared_ptrsharedPtr;A*rawPtr;B();~B(){deleterawPtr;}};classA{public:~A(){std::cout(newA());uniquePtr=std::unique_ptr(ne

c# - C++ 中的 DirectX11 引擎和 C# 中的接口(interface)

我有一个用C++编写的DirectX11引擎,一个用C++编写的带有CLR的包装器,以及一个用C#编写的接口(interface)。1)我很好奇这种结构的瓶颈在哪里,我想知道是否有更有效的方法让我在WinForms控件中托管DirectX11渲染。2)有没有办法在WinForms控件所有者以外的线程上呈现?我对此表示怀疑,但我想我会问。3)有没有办法在不通过每个帧上的包装层的情况下渲染多个帧,但保持应用程序响应?我已经将此设置与SlimDX进行了比较,实际上在简单地清除屏幕而不进行任何其他API调用时,FPS会稍微变慢。SlimDX~3000FPS,我的引擎~2000FPS。这没什么大

C++11 实验,为什么我不能使用某些功能?

我目前正在概述C++11的新特性,由于目前不明原因,其中一些特性无法编译。我使用gccversion4.6.020100703(experimental)(GCC)所以根据GNUGCCFAQ,我尝试的所有功能都是supported.我尝试使用std=c++0x和std=gnu++0x标志进行编译。非成员begin()&end()例如,我不想在如下代码中使用非成员begin()和end():#include#include#include#includeusingnamespacestd;intmain(){mapalias;alias.insert(pair("ll","ls-al")

c++ - 将 C++11 代码编译为 MATLAB mex 文件的一部分

我有一段用C++11编写的代码,我想将其编译为GNU/Linux的MATLABMEX文件的一部分。问题是Linux上的MATLAB仅支持GCC4.3(及更早版本),不支持编译我的C++11代码所需的GCC4.7。是否可以解决该问题?是否可以通过使用GCC4.7编译一些目标文件并使用GCC4.3将它们链接到MEX文件来解决这个问题?提前致谢! 最佳答案 如果您可以在4.3扩展中编写任何代码并编译它,那么只需编写代码来dlopen一个您在4.7中编写和编译的共享对象。使用4.7.so完成所有c++11工作,并通过C接口(interfac

c++ - 有没有用 C++11 中基于范围的 for 循环替换 BOOST_FOREACH 的经验?

您是否经历过将BOOST_FOREACH替换为基于范围的for循环的过程?机械地(即没有对周围的代码进行深入研究)时是否有任何问题?背景:我确实有大约25万行的源代码,是使用MicrosoftVC++10(VisualStudio2010)编译的。该代码还使用了boost库中的BOOST_FOREACH。我只是在尝试使用auto实现基于范围的for循环的VC++11(VisualStudio2012RC)。到目前为止,我遇到过元素声明在BOOST_FOREACH之外的情况(括号内没有声明):BOOST_FOREACH(element,container){...}...并且元素应该在b

c++ - 确定在 C++11 中实现大数的最有效字长?

通常bignums是通过使用多个单词来实现的,但我想选择尽可能便携的单词大小。这比看起来更棘手--std::uint64_t在许多32位编译器中可用,但std::uint32_t可能是更好的选择32位机器。因此,人们很想使用std::size_t,但对于给定的体系结构,不能保证std::size_t是最有效的算术类型,例如thenewx32LinuxABI。std::size_t将是32位,但std::uint64_t仍然是最佳选择。C++11定义了各种大小的快速/最小类型,但它没有提供任何查询它们相对性能的方法。我意识到可能没有最好的可移植答案,我现在最好的猜测是默认为std::si

c++ - 带有 gmock 的 11 个参数的 mock 方法

我正在使用gmock模拟遗留代码中的依赖项。其中一个类有一个带有11个参数的方法。当我尝试使用MOCK_METHOD11_WITH_CALLTYPE来模拟它时,我发现这个宏不存在。gmock最多只支持10个参数。你对此有何建议?我是否用假体实现这个方法?还是复制并扩展宏?谢谢!PS,我现在不需要在我的测试中模拟这个方法,但将来可能需要这样做。最好的问候, 最佳答案 具有超过10个参数的方法可能是一个麻烦的迹象。我可以建议一个解决方法,这将有助于您的具体情况,但除了模拟之外,这也可能是一个好主意。将几个有意义的参数作为一个组,并将它们

c++ - 在 C++ 11 中将非常量左值引用绑定(bind)到右值是否有效?(已修改)

我知道在c++03中,非常量引用不能绑定(bind)到右值。T&t=getT();无效,在c++11中,我们可以这样做:T&&t=getT();但是上面的代码,应该在c++11中工作吗?我用vs11测试了下面的代码:FoogetFoo(){returnFoo();}voidfz(Foo&f){}intgetInt(){returnint();}voidiz(int&i){}intmain(){{Foo&z=getFoo();//okfz(getFoo());//okint&z2=getInt();//error:initialvalueofreferencetonon-constmus

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain

C++11 main() 返回时终止线程?

我听说“现代操作系统会在关闭进程时清除进程创建的所有线程”,但是当我返回main()时,我遇到了这些错误:1)ThisapplicationhasrequestedtheRuntimetoterminateitinanunusualway.Pleasecontacttheapplication'ssupportteamformoreinformation.2)terminatecalledwithoutanactiveexception我的实现看起来像这样(例如,我现在写的是对糟糕的实现感到抱歉):voidprocess(intid){while(true){std::this_thr