当需要销毁该类的对象时,关闭由C++类管理的Boost线程的最佳方法是什么?我有一个类,它在构造时创建并启动一个线程,并提供一个公共(public)Wake()方法,该方法在需要做一些工作时唤醒线程。Wake()方法使用Boostmutex和Boost条件变量向线程发出信号;线程过程等待条件变量,然后完成工作并返回等待。目前,我在类的析构函数中关闭了这个线程,使用bool成员变量作为“运行”标志;我清除标志,然后在条件变量上调用notify_one()。然后线程过程唤醒,注意到“运行”为假,然后返回。代码如下:classWorker{public:Worker();~Worker();
当需要销毁该类的对象时,关闭由C++类管理的Boost线程的最佳方法是什么?我有一个类,它在构造时创建并启动一个线程,并提供一个公共(public)Wake()方法,该方法在需要做一些工作时唤醒线程。Wake()方法使用Boostmutex和Boost条件变量向线程发出信号;线程过程等待条件变量,然后完成工作并返回等待。目前,我在类的析构函数中关闭了这个线程,使用bool成员变量作为“运行”标志;我清除标志,然后在条件变量上调用notify_one()。然后线程过程唤醒,注意到“运行”为假,然后返回。代码如下:classWorker{public:Worker();~Worker();
我记得(很久以前)在一本C++书籍中读到,使用内联构造函数和析构函数并不是一个好主意,尤其是对于派生类。我知道内联会导致目标代码膨胀,但是是否有任何其他设计考虑不鼓励内联构造函数和析构函数?当然,大多数编译器可能会拒绝内联并继续创建函数体,但如果他们要内联,可能需要付出什么代价? 最佳答案 编译器可以自由地内联您未声明为inline的代码,也可以自由地不内联您已声明为inline的代码。我已经看到编译器做了这两件事。因此,inline关键字并不像大多数人认为的那样。它的意思是允许一个定义规则的异常(exception),所以你可以把
我记得(很久以前)在一本C++书籍中读到,使用内联构造函数和析构函数并不是一个好主意,尤其是对于派生类。我知道内联会导致目标代码膨胀,但是是否有任何其他设计考虑不鼓励内联构造函数和析构函数?当然,大多数编译器可能会拒绝内联并继续创建函数体,但如果他们要内联,可能需要付出什么代价? 最佳答案 编译器可以自由地内联您未声明为inline的代码,也可以自由地不内联您已声明为inline的代码。我已经看到编译器做了这两件事。因此,inline关键字并不像大多数人认为的那样。它的意思是允许一个定义规则的异常(exception),所以你可以把
有没有办法破坏一个结构(不是一个类)? 最佳答案 在C++中,struct与class完全相同,但成员和基的默认可见性除外。因此,如果有办法“破坏”一个类,您可以使用完全相同的方式“破坏”一个结构。所以,如果你的C++程序中有一个structs{},你可以这样做:s*v=news();deletev;//willcallstructure'sdestructor. 关于c++-我可以在C++中破坏结构吗?,我们在StackOverflow上找到一个类似的问题:
有没有办法破坏一个结构(不是一个类)? 最佳答案 在C++中,struct与class完全相同,但成员和基的默认可见性除外。因此,如果有办法“破坏”一个类,您可以使用完全相同的方式“破坏”一个结构。所以,如果你的C++程序中有一个structs{},你可以这样做:s*v=news();deletev;//willcallstructure'sdestructor. 关于c++-我可以在C++中破坏结构吗?,我们在StackOverflow上找到一个类似的问题:
char*buf=newchar[sizeof(T)];new(buf)T;T*t=(T*)buf;//code...//hereIshoulddestruct*tbutasitisargumentoftemplateandcanbe//instantiatedviabasictypesaswell(sayint)sosuchcode/*t->~T();*///isincorrect(maybecorrect?Strange,butitworksonVS2005forbasictypes.)//andthiscode/*deletet;*///crashestheprogram.del
char*buf=newchar[sizeof(T)];new(buf)T;T*t=(T*)buf;//code...//hereIshoulddestruct*tbutasitisargumentoftemplateandcanbe//instantiatedviabasictypesaswell(sayint)sosuchcode/*t->~T();*///isincorrect(maybecorrect?Strange,butitworksonVS2005forbasictypes.)//andthiscode/*deletet;*///crashestheprogram.del
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:STLcontainerselementdestructionorder是否保证std::vector的元素会自始至终被销毁? 最佳答案 2003:5.3.5/6谈到delete[]:Thedelete-expressionwillinvokethedestructor(ifany)fortheobjectortheelementsofthearraybeingdeleted.Inthecaseofanarray,theelementswillbedest
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:STLcontainerselementdestructionorder是否保证std::vector的元素会自始至终被销毁? 最佳答案 2003:5.3.5/6谈到delete[]:Thedelete-expressionwillinvokethedestructor(ifany)fortheobjectortheelementsofthearraybeingdeleted.Inthecaseofanarray,theelementswillbedest