草庐IT

c++ - JS_NewContext 中的 JSAPI 段错误

我正在编写一个嵌入SpiderMonkey的简单C++程序。不幸的是,它在JS_NewContext()中出现段错误。程序(保存为jsapi_use.cpp):#define__STDC_LIMIT_MACROS#include#include#includestaticJSClassglobal_class={#if0.name="global",.flags=JSCLASS_GLOBAL_FLAGS,.addProperty=nullptr,.delProperty=nullptr,.getProperty=nullptr,.setProperty=nullptr,.enumera

运算符小于非无效的RAW指针和NullPtr

是操作nullptr和ptr定义为非无效的原始指针ptr!=nullptr?欢迎来自C++标准的报价。看答案这样的比较是良好的,但未指定的结果。[expr.rel]/3比较指针与对象的定义如下:-如果两个指针指向同一数组的不同元素,或者指向其子对象,则具有更高下标的指向元素的指针会更大。-如果一个指针指向数组的一个元素,或者指向其子对象,而另一个指针指向数组的最后一个元素,则后一个指针比较更大。-如果两个指针指向同一对象的不同非静态数据成员,或者指向此类成员的子对象,则递归,如果两个成员具有相同的访问控件(第11节),则更大的指向后面声明的成员进行比较。他们的班级不是工会。[expr.rel]

c++ - NULL 和 nullptr 比较

比较一个为NULL和另一个为nullptr的指针是否安全?这种比较总是正确的吗? 最佳答案 是的。NULL和nullptr都是“空指针常量”和Anullpointerconstantcanbeconvertedtoapointertype;theresultisthenullpointervalueofthattypeandisdistinguishablefromeveryothervalueofobjectpointerorfunctionpointertype.最后,Twonullpointervaluesofthesamet

c++ - 在什么情况下 delete 运算符会抛出错误?

在我的链表实现中,删除内部类Node实例的辅助函数deleteNode(Node*)抛出运行时错误,通过“触发断点”在VS2015的本地Windows调试器中。我小心地匹配我的new和delete运算符。范围/引用是否发挥了我没有意识到的作用?即使clear()中存在逻辑错误并且deleteNode()被传递给nullptr,它也不应该抛出错误删除nullptr,然后将nullptr赋值给自己吧?该删除有什么问题?classLinkedList{public:LinkedList():head(nullptr){}~LinkedList(){clear();}voidpush_fron

c++ - MFC UpdateAllViews 是阻塞还是非阻塞?

我有一个基于文档View框架的MFC代码。我使用Document类中的UpdateAllViews(nullptr,0,nullptr)来调用View的OnDraw成员函数。voidMyDocumentClass::MyFunction(){//..DocumentcodetocreateandprocessdataUpdateAllViews(nullptr,0,nullptr)//InvokesOnDraw//Whendoesprogramcontrolreachthisline?}我的问题是,请告诉我UpdateAllViews函数是阻塞的还是非阻塞的,程序控制什么时候到达Upd

c++ - std::unique_ptr 是否在其析构函数中将其基础指针设置为 nullptr?

在实现我自己的unique_ptr时(只是为了好玩),我发现它不能通过这个testfile来自libstdcxx:structA;structB{std::unique_ptra;};structA{B*b;~A(){VERIFY(b->a!=nullptr);}};voidtest01(){Bb;b.a.reset(newA);b.a->b=&b;}gccpasses愉快地测试这个文件(当然,这个文件来自libstdcxx),而clangfails对于VERIFY部分。问题:它是依赖于实现还是未定义的行为?我想这个后置条件(b->a!=nullptr)对gcc很重要,否则它不会有测试

c++ - `nullptr_t` 应该是全局命名空间的一部分吗?

我看到微软的stddef.h定义nullptr_t是这样的:namespacestd{typedefdecltype(__nullptr)nullptr_t;}using::std::nullptr_t;usingdecleration将nullptr_t注入(inject)全局命名空间。我在标准中找不到任何内容表明应该这样做。我还看到在GCC中nullptr_t不在全局命名空间中。这两种实现都可以被允许还是其中之一是错误?糟糕的是,GCC的行为与CL相同。编辑:cstddef也会发生同样的情况,下面的代码可以用VC(onlinetoo)编译。#includeintmain(){nul

c++ - 是否可以将 "fill"函数参数(默认为 null)与对象一起使用?

假设我有这个方法:boolmatch(/*someoptionalparameter*/);这将进行一些字符串模式匹配,我想允许它被赋予一个可选参数,当方法match()返回true,这样的事情可能吗?在PHP中我可以这样做:publicfunctionmatch(Match&$match=null){if(someMatchingRoutineMatched()){$match=newMatch();returntrue;}returnfalse;//$matchwillstaynull}然后像这样调用它://$testissomeinstanceoftheclassthatimpl

c++ - 使用 move-constructor 时将 self 重置为 nullptr 是个好习惯吗?

在C++11中,移动构造函数/运算符支持资源/内存移动。这是我的例子:classA{public:A():table_(nullptr),alloc_(0){}~A(){if(table_)delete[]table_;}A(constA&other){//table_isnotinitialized//if(table_)//delete[]table_;table_=newint[other.alloc_];memcpy(table_,other.table_,other.alloc_*sizeof(int));alloc_=other.alloc_;}A&operator=(co

c++ - 带投影的无边框窗口

我正在尝试实现类似VisualStudio安装程序对无边框窗口和投影的效果:我尝试了各种选项,如CS_DROPSHADOW和DWMAPI,但只要我应用WS_THICKFRAME样式,阴影就会消失。这是我创建和居中窗口的代码:RECTR={0,0,_clientWidth,_clientHeight};AdjustWindowRect(&R,WS_OVERLAPPEDWINDOW,false);_mainWnd=CreateWindow(L"D3DWndClassName",_mainWndCaption.c_str(),WS_OVERLAPPEDWINDOW,100,100,R.rig