草庐IT

send_this_email

全部标签

c++ - 引用 this 指针 : GCC vs clang

这是these的后续questions.考虑以下代码:structA{private:A*const&this_ref{this};};intmain(){Aa{};(void)a;}如果使用-Wextra编译,两者都是GCCv6.2和clangv3.9显示警告。无论如何,在下面显示的稍作修改的版本中,它们的行为有所不同:structA{A*const&this_ref{this};};intmain(){Aa{};(void)a;}在这种情况下GCC没有给出任何警告,clang给出与上一个示例中返回的警告相同的警告。警告几乎相同。它遵循来自clang的那个:3:warning:bin

c++ - DXGI 桌面重复 : encoding frames to send them over the network

我正在尝试编写一个应用程序来捕获屏幕的视频流并将其发送到远程客户端。我发现在Windows上捕获屏幕的最佳方法是使用DXGIDesktopDuplicationAPI(自Windows8起可用)。微软提供了一个简洁的sample它将重复的帧流式传输到屏幕。现在,我一直想知道对这些帧进行编码并通过网络发送它们的最简单但仍然相对较快的方法是什么。帧来自AcquireNextFrame具有包含桌面位图和元数据的表面,其中包含已更新的脏区域和移动区域。从这里开始,我有几个选择:从DirectX表面提取位图,然后使用ffmpeg等外部库将一系列位图编码为H.264并通过RTSP发送。虽然简单明了

c++ - 如何使用 shared_ptr 并从 enable_shared_from_this 继承来制作克隆方法

我已经看到编写返回boost::shared_ptr的克隆方法的一种有用方法是做classA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualA*CloneImpl()const{return(newA(*this));}};classB:publicA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualB*CloneImpl()const{return(newB(*

c++ - 在 "delete this"之后访问局部变量

我有一个使用引用计数机制的类。当引用计数降为零时,通过调用deletethis最终销毁此类的对象。我的问题是:在deletethis之后我可以使用本地堆栈变量吗?这是一个更具体的例子:classRefCountedClass{public:RefCountedClass(Mutex&m):mutex_(m){}...private:Mutex&mutex_;voidRemoveReference(){//AsIunderstand,mutex_willbedestroyedafterdelete,//butusingmisallrightbecauseitison-stackand//

c++ - C++ 中的数组 : can you explain what this line of code is doing?

我需要修改一些C++代码,但由于我对这门语言还比较陌生,所以在理解某些表达式时遇到了困难。我有一个函数voidfunc(doublem[2][12],doublen[2][3])像这样从其他函数内部调用doubleA[12];doubleB[6];(...)func((double(*)[12])A,(double(*)[3])B)最后一行代码是将一维数组转换为二维数组,但到底发生了什么?我可以使用相同的技术将一维数组转换为二维数组吗?:doubleA[12];doubleB[6];(double(*)[12])A[0][5]=5; 最佳答案

c++ - 为什么 std::function 在签名中接受 this 引用?

成员函数有一个隐含的this指针参数。为什么std::function接受这个签名,那么,这里的S是一个简单的类?(completesample)std::functionfunc=&S::foo;调用它也可以,并且可以区分对象:Ss1={5};Ss2={6};func(s1);//prints5func(s2);//prints6我通常期望的是它需要一个指针,它也能正常工作:(completesample)std::functionfunc=&S::foo;Ss1={5};Ss2={6};func(&s1);//prints5func(&s2);//prints6当隐式this参数是

c++ - 如何在不破坏 vtbl 的情况下执行与 memset(this, ...) 等效的操作?

我知道memset不适合用于class初始化。例如,类似于以下内容:classX{public:X(){memset(this,0,sizeof(*this));}...};如果混合中有virtual函数,将会破坏vtbl。我正在处理一个(巨大的)遗留代码库,它是C-ish但用C++编译,因此所有有问题的成员通常都是POD,不需要传统的C++构造函数。C++的使用逐渐深入(如虚函数),这让没有意识到memset具有这些额外的C++dentry的开发人员感到痛苦。我想知道是否有一种C++安全的方法来执行初始的全能零初始化,然后可以在不适合零初始化的情况下进行特定的按成员初始化?我找到了类

c++ - 使用 static_cast 处理混合(基础和派生)对象的 vector 是否存在性能风险? (又名 "it this a dumb idea?")

给定基类gameObject和派生类animatedGameObject,我认为将它们的所有实例存储在std::vector。如果vectorGameObjects声明为gameObject*的基类型,则派生对象实例需要强制转换。例子:vectorGameObjects;gameObjectA*=newgameObject(...init...);animatedGameObjectB*=newanimatedGameObject(...init...);GameObjects.push_back(A);GameObjects.push_back(B);//toaccesstheani

c++ - 枚举 [标签] [ : type] {enum-list} [declarator] in C++ - is this legal?

我正在使用C++中的自定义枚举类型,但它没有很多值。我想尝试减小它们占用的大小,而且我听说enum类型是alwaysintegersbydefault.然后我遇到了MSDNentryonC++enumerations,发现下面的语法很有趣:enum[:type]{enum-list};果然,当我执行以下操作时,它编译出了我想要的(VS2008):enumplane:unsignedchar{xy,xz,yz};现在,您可以从我的枚举常量中看出我不需要太多空间-unsignedchar类型非常适合我的使用。但是,我不得不说,我从未在互联网上的其他地方任何地方见过这种形式——大多数人甚至似

c++ - 尽管捕获了所有内容,但为什么 'this' 是必需的

谁能向我解释为什么我必须在第二个lambda中显式地写“this->”,即使我捕获了所有内容?完整性错误信息:cannotcallmemberfunction'result_ttest::get()'withoutobject#include#include#include#includeusingresult_t=std::function;structtest{boolnoMore=false;result_tget(){return[this]{std::vectorvec;vec.push_back(1);vec.push_back(2);vec.push_back(3);if