草庐IT

auto-delete

全部标签

c++ - 在 C++ 中,指针是否保证在 `delete` 之后保留其值?

灵感来自thisquestion.假设在C++代码中我有一个有效的指针并正确地delete它。根据C++标准,指针将变为无效(3.7.3.2/4-释放函数将使引用所有已释放存储部分的指针无效)。至少在大多数实现中,它会保留值并存储与delete之前完全相同的地址,但是usingthevalueisundefinedbehavior.标准是否保证指针将保留其值,或者该值是否允许更改? 最佳答案 不,不能保证,实现可以合法地将零分配给delete的lvalue操作数。BjarneStroustrup曾希望实现会选择这样做,但没有多少人这

c++ - 在 C++ 中,指针是否保证在 `delete` 之后保留其值?

灵感来自thisquestion.假设在C++代码中我有一个有效的指针并正确地delete它。根据C++标准,指针将变为无效(3.7.3.2/4-释放函数将使引用所有已释放存储部分的指针无效)。至少在大多数实现中,它会保留值并存储与delete之前完全相同的地址,但是usingthevalueisundefinedbehavior.标准是否保证指针将保留其值,或者该值是否允许更改? 最佳答案 不,不能保证,实现可以合法地将零分配给delete的lvalue操作数。BjarneStroustrup曾希望实现会选择这样做,但没有多少人这

c++ - Qt: "new without delete"是否会导致控件的内存泄漏?

我正在查看Qt示例here:在构造函数内部,它们有:Window::Window(){editor=newQTextEdit();//Memoryleak?QPushButton*sendButton=newQPushButton(tr("&Sendmessage"));//Memoryleak?connect(sendButton,SIGNAL(clicked()),this,SLOT(sendMessage()));QHBoxLayout*buttonLayout=newQHBoxLayout();//Memoryleak?buttonLayout->addStretch();bu

c++ - Qt: "new without delete"是否会导致控件的内存泄漏?

我正在查看Qt示例here:在构造函数内部,它们有:Window::Window(){editor=newQTextEdit();//Memoryleak?QPushButton*sendButton=newQPushButton(tr("&Sendmessage"));//Memoryleak?connect(sendButton,SIGNAL(clicked()),this,SLOT(sendMessage()));QHBoxLayout*buttonLayout=newQHBoxLayout();//Memoryleak?buttonLayout->addStretch();bu

PUT/DELETE 为何成了 HTTP 协议中的不安全方法

要求:禁止使用不安全的HTTP方法,例如PUT、DELETE等。缘由1:TomcatPUT的上传漏洞,受影响的版本:Apache Tomcat7.0.0to7.0.79当Tomcat运行在Windows操作系统时,且启用了HTTPPUT请求方法(例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。利用条件:ApacheTomcat默认开启PUT方法,org.apache.catalina.servlets.DefaultSe

c++ - 是否可以模拟模板<auto X>?

有可能吗?我希望它能够在编译时传递参数。假设它只是为了方便用户,因为总是可以用template输入真实类型,但对于某些类型,即指向成员函数的指针,即使使用decltype也是非常乏味的。作为捷径。考虑以下代码:structFoo{templatevoidbar(){//dosomethingwithX,compile-timepassed}};structBaz{voidbang(){}};intmain(){Foof;f.bar();f.bar();}是否有可能将其转换为以下内容?structFoo{templatevoidbar(){//dosomethingwithX,compi

c++ - 是否可以模拟模板<auto X>?

有可能吗?我希望它能够在编译时传递参数。假设它只是为了方便用户,因为总是可以用template输入真实类型,但对于某些类型,即指向成员函数的指针,即使使用decltype也是非常乏味的。作为捷径。考虑以下代码:structFoo{templatevoidbar(){//dosomethingwithX,compile-timepassed}};structBaz{voidbang(){}};intmain(){Foof;f.bar();f.bar();}是否有可能将其转换为以下内容?structFoo{templatevoidbar(){//dosomethingwithX,compi

c++ - 为什么在空指针上调用 "operator delete"时会调用 "delete"?

阅读thisquestion的答案时我注意到答案(例如this)暗示即使在空指针上执行delete语句时也可以调用operatordelete。所以我写了一个小片段:classTest{public:void*operatornew(size_t){/*doesn'tmatter*/return0;}voidoperatordelete(void*ptr){ptr;//tosuppresswarningandhavealinetoputbreakpointon}};intmain(){Test*ptr=0;deleteptr;}而且-令我惊讶的是-Test::operatordelet

c++ - 为什么在空指针上调用 "operator delete"时会调用 "delete"?

阅读thisquestion的答案时我注意到答案(例如this)暗示即使在空指针上执行delete语句时也可以调用operatordelete。所以我写了一个小片段:classTest{public:void*operatornew(size_t){/*doesn'tmatter*/return0;}voidoperatordelete(void*ptr){ptr;//tosuppresswarningandhavealinetoputbreakpointon}};intmain(){Test*ptr=0;deleteptr;}而且-令我惊讶的是-Test::operatordelet

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD