来自 数据 2021-12-14 03:08 的文章

ddos防御_高仿表值得购买吗?_精准

ddos防御_高仿表值得购买吗?_精准

移动语义是C++ 11中引入的另一种游戏变换器。编写C++代码的一个很大的抱怨是复制构造和拷贝赋值会导致性能问题,因为伪拷贝可能很昂贵。这种情况在某种程度上被不太理解的复制省略概念(在某些特殊情况下可以跳过复制操作,在这种情况下,编译器可以保证操作在有或没有复制的情况下行为一致),但在实践中仍然是一个大问题。考虑:#包括#包括 std::vectormoby逖dick_句子(){std::vector句子;//读白鲸,分成句子。复句;} 内部主(){std::vector句子;句子=moby_dick_questions();}在C++ 98中,这个代码的性能很差,免费ddos防御,因为我们必须把每个句子从Moby Dick复制到一个新的内存区域。向量复制构造函数将被调用一次,以便从函数调用的隐藏返回值中为main()中的"语句"赋值。由于将局部变量"conditions"赋值给moby_dick_nctions()中的实际隐藏返回值,因此省略了复制操作,精明的观察者会注意到,在执行复制操作之后,隐藏的返回值将立即被销毁地点。这个这就是移动语义的威力所在:在许多情况下,我们执行复制操作后几乎立即销毁了复制源,特别是当涉及到临时性时--与其执行复制然后销毁,为什么不直接从即将销毁的对象中窃取资源?简单地说,这就是移动语义:与其执行一个可能代价高昂的复制操作,不如将资源从即将被销毁的对象中拿走(但要使其处于有效状态,因为它仍将被销毁!)。那么它是如何工作的呢?它通过一个称为"rvaluereferences"的必然特性工作。我不想花大量的时间来讨论值类别及其背后的理论,但是一个简单的方法是:当你想要一个左值引用(一个有名称和一个内存位置的东西)时,下列无法防御ddos,你可以使用&token;当你想要一个rvalue引用(一个有内存位置但没有名称的东西)时,你使用&&token。有两个新的特殊成员函数,您将看到这个新标记最常用:构造函数和赋值运算符。就像有一个复制构造函数,ddos防御网,现在也有一个move构造函数。类似地,就像有一个复制赋值操作符,现在有一个move赋值操作符嗯。说话关于如何正确使用move语义和rvalue引用本身就是一个讲座,所以我不会过多地讨论如何编写自己的语言,但基本要点是:结构{S();//默认构造函数~S();//析构函数 S(const S&);//复制构造函数S(S&&);//移动构造函数 S&operator=(const S&);//复制赋值运算符S&operator=(S&);//移动赋值运算符};您会注意到,复制操作接受常量左值引用,高防cdn动态,而移动操作接受非常量值引用。这是因为当操作完成时,moved from对象(源)需要保持有效状态。典型的实现可能类似于:#包括 S: :S(S和其他){我的指针成员=其他。我的指针成员;我的"长度"成员=其他。我的"长度"成员;   其他。我的指针成员=空ptr;  其他。我的"长度"成员=0;} S&S::operator=(S和其他){使用std::swap;交换(我的指针成员,其他。我的指针成员);交换(我的"长度"成员,其他。我的"长度"成员);return*这个;} 这演示了如何从源对象中窃取内部状态,然后在调用源对象的析构函数时将其保留为可销毁的有效对象。这就防止了rvalue对象释放我们刚刚从它下面偷出来的指针(又称双重自由bug),移动语义的一个精妙之处在于:你不必知道它的存在并且仍然受益!整个STL已被修改为向各种容器数据类型(std::string、std::vector等)添加移动语义,因此您的代码无需更改即可自动受益。我最初的例子是Moby Dick的语句不再调用任何复制操作,因为编译器在C++ 11或更高版本编译时自动选择移动赋值操作符。然而,由于move操作提供的性能改进,类作者在发现自己正在编写一个复制构造函数或复制赋值运算符时,应该考虑移动语义,以决定移动操作是否对其类有利。但是,这不是必需的,因为如果没有提供move操作符,所有常见的移动操作都将优雅地退化为复制操作。在第3部分中,我将讨论自动类型推断。你喜欢读什么?下载我们的白皮书"高级静态分析C++",高防御ddos系统,以了解更多。阅读指南hbspt.cta公司.\u relativeUrls=真;hbspt.cta.负荷(582328,'42fd5967-604d-43ad-9272-63d7c9d3b48f',{});