草庐IT

c++ - 如何在这段代码中避免 DOS 攻击?

我有一个用C/C++编写的代码,如下所示:while(1){//Acceptstructsockaddr_inclient_addr;intclient_fd=this->w_accept(&client_addr);charclient_ip[64];intclient_port=ntohs(client_addr.sin_port);inet_ntop(AF_INET,&client_addr.sin_addr,client_ip,sizeof(client_ip));//Listenfirststringcharfirststring[512];memset(firststrin

c++ - 使用 C 的回调接口(interface)时避免在 C++ 中使用静态成员函数

我想访问这个静态成员函数中的数据。现在成员函数是静态的,因此我可以将它与用C编写的第三方API一起使用,该API具有用于回调目的的typdef函数指针。根据下面的信息,什么是最好的方法来解决创建静态函数的需要,以便在我的类的其他非静态成员函数中使用来自以下函数成员的数据。也许有一种方法仍然可以使用这个静态函数,但仍然可以克服无法将静态变量与非静态变量混合的问题。我的代码按原样运行,但无法访问以下回调函数中的数据。voidTextDetect::vtrCB(vtrTextTrack*track,void*calldata)/*actsasacallback*/{/*specificall

c++ - 如何避免丢失自动生成的初始化列表构造函数?

我喜欢新的自动生成的大括号括起来的初始值设定项!如果我开始声明自己的构造函数,有什么方法可以避免丢失它们?代码#includestructFoo{inti;std::strings;//Foo(){}//Ilosemybrace-enclosedinitializersifIuncommentthisline};intmain(intargc,char*argv[]){Foof{1,"bar"};//havingtheoptiontodothisisgoodreturn0;}回答鉴于juanchopanza'sanswerbelow,看起来我必须满足aggregates的冗长规则.但我

c++ - 如何正确组合来自基类和派生类的函数以避免警告?

这个问题类似于this,但更复杂。有接口(interface)和类:classB{public:virtualstringgetName(intindex){returnnames.size()names;};templateclassA:publicT{public:stringgetName(void)//warninghere{returnname;};protected:stringname;};intmain(intargc,constchar*argv[]){Atest;}如您所见,我不能在A中使用usingT::getName,因为T可能没有getName()方法。我怎样

c++ - 避免模​​板特化中的构造函数重复

假设我有一个基类存储对某些classBar的引用:classFooBase{public:FooBase(Bar&ctx):_barCtx(ctx){};virtual~FooBase(){};//Someotherfunctionsprotected:Bar&_barCtx;};我想做的是在此之上添加一个继承级别,其中classFoo会增加一些功能。templateclassFoo:publicFooBase{public:Foo(Bar&ctx):FooBase(ctx){};booldoSomething(inta);};然后,有一些实例Foo需要提供不同版本的doSomethi

c++ - 为什么 C++ 分配器避免就地重新分配

我对realloc的理解是,如果内存在分配点之外连续可用,它可以尝试扩展当前分配而不进行复制。阅读本文时https://github.com/facebook/folly/blob/master/folly/docs/FBVector.md我开始知道大多数分配器都避免就地重新分配.Manymemoryallocatorsdonotsupportin-placereallocation,althoughmostofthemcould.Thiscomesfromthenownotoriousdesignofrealloc()toopaquelyperformeitherin-placere

c++ - int to void* - 避免 c 风格的转换?

我需要将int(指定字节偏移量)转换为constvoid*。唯一真正适合我的解决方案是C风格的转换:intoffset=6*sizeof(GLfloat);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0,(void*)offset);我想摆脱c风格的强制转换,但找不到可行的解决方案。我试过了static_cast(&offset)它可以编译,但这不是正确的解决方案(这种方法的整个输出不同)。什么是正确的解决方案?glVertexAttribPointer文档链接:Link 最佳答案 考虑到

c++ - 使用委托(delegate)构造函数来避免泄漏

在一次谈话中,以下代码已被证明是不安全的,因为如果构造函数抛出异常,则不会调用析构函数并泄漏资源:classTwoResources{TwoResources(intx,inty):m_a(nullptr),m_b(nullptr){m_a=newA(x);m_b=newB(y);}~TwoResources(){deletem_b;deletem_a;}A*m_a;B*m_b;};建议的解决方案是使用委托(delegate)构造函数,如下所示:classTwoResources{TwoResources():m_a(nullptr),m_b(nullptr){}TwoResource

c++ - 避免使用 "child"延迟 `operator<<` 对象构造

假设我有一个存储std::vector的容器对象多态child。structChild{Child(Parent&mParent){/*...*/}virtual~Child(){}};classParent{private:std::vector>children;templateauto&mkChild(TArgs&&...mArgs){//`static_assert`that`T`isderivedfrom`Child`...children.emplace_back(std::make_unique(std::forward(mArgs)...));return*childr

C++ 模板特化 - 避免重新定义

我想要一个接受不同类型参数的通用函数(或方法)。如果提供的类型有“一个”方法,函数应该使用它。如果它有“两个”方法,则该函数应该使用它。这是无效代码:#includetemplatevoidfunc(Typet){t.one();}templatevoidfunc(Typet)//redefinition!{t.two();}classOne{voidone(void)const{std::cout是否可以使用SFINAE来实现?是否可以使用type_traits来实现?澄清:如果使用SFINAE可以做到这一点,我会更高兴。最好的情况是:使用第一个模板,如果失败则使用第二个。检查方法是