草庐IT

destroy_orphaned_parent

全部标签

c++ - 使用模板继承调用祖 parent 构造函数

我选择使用模板化继承以避免多重继承和虚拟继承。我的目标是让各种child(4或5代或我无法控制的继承)有一个共同的函数调用,无论他们派生什么。我的解决方案是这样插入一个模板继承:templateclasscommon_call:publicBASE{public:voidfoo(){/*implementationindependentofbase*/}};classchild1:publiccommon_call{};classchild2:publiccommon_call{};这里有调用base的构造函数的问题。类base1和base2(不是我写的)有不同的构造函数,我必须在初始

c++ - Q文件对话框 : GtkDialog mapped without a transient parent

我有一个用C++中的Qt编写的程序的源代码片段,在Linux下运行,它创建一个QFileDialog来打开现有文件。如果我执行此操作,一切似乎都正常,但是当创建对话框时,我收到一条警告说“Gtk-Message:GtkDialogmappedwithoutatransientparent”。在另一个thread我发现调用此函数“gtk_window_set_transient_for()”可修复此错误。但是这个函数是GTK库的一部分但是我使用的是Qt框架。那么有什么解决方案可以解决这个错误吗?这个对话框的父级是一个QMainWindow:QStringfilename=QFileDia

c++ - Qt避免警告'QProcess : destroyed while process still running

最简单的代码:voidtest{QProcessp;p.start("sleep10");p.waitForBytesWritten();p.waitForFinished(1);}当然,在函数结束前进程是不能结束的,所以会显示警告信息:QProcess:Destroyedwhileprocess("sleep")isstillrunning.我不希望显示此消息-我应该在函数结束之前自行销毁该进程,但我找不到如何正确执行此操作:p.~QProcess(),p.terminate(),p.kill()帮不了我。注意:我不想等待进程执行,只是在它运行时自行终止它。

c++ - C++ 抽象工厂是否应该为构造的对象提供 destroy 方法?

考虑下面的接口(interface)(使用哑指针是因为我们还在C++98)classWidgetMaker{virtualWidget*makeWidget()=0;};具有以下可能的实现classSpecificWidgetMaker:publicWidgetMaker{Widget*makeWidget(){returnnewSpecificWidget();}};Widget是一些具有虚析构函数的基类,SpecificWidget扩展了它。我的同事声称WidgetMaker接口(interface)应该包含以下方法virtualvoidfreeWidget(Widget*widg

c++ - parent_path() 带或不带斜杠

如documentation中所述,以下的预期输出是:boost::filesystem::pathfilePath1="/home/user/";cout问题是,你如何处理这个问题?也就是说,如果我接受一个路径作为参数,我不希望用户关心它是否应该有尾部斜线。看起来最简单的做法是在尾部附加一个斜杠,然后调用parent_path()两次以获得我想要的“/home”的父路径:boost::filesystem::pathfilePath1="/home/user/";filePath1/="/";cout但这看起来很荒谬。有没有更好的方法在框架内处理这个问题?

c++ - 找到 `destroyed(QObject*)`信号的发送者

我目前在想如何合理使用QObject::destroyed(QObject*)signal.观察我注意到QWidget-派生对象的处理方式略有不同。考虑以下小型独立编译示例:/*sscce.pro:QT+=coreguiwidgetsCONFIG+=c++11TARGET=sscceTEMPLATE=appSOURCES+=main.cpp*/#include#include#include#includeintmain(intargc,char*argv[]){QApplicationapp(argc,argv);QPushButton*button=newQPushButton;Q

C++ WINAPI : How to kill child processes when the calling (parent) process is forcefully terminated?

谁能告诉我如何在调用(父)进程被强制终止时终止子进程?顺便说一句,我无法更改子应用程序的源代码。我检查了StackOverflow中的现有线程,JobObject似乎是正确的方法。但是当我测试它时(使用控制台应用程序调用notepad.exe),我发现当控制台应用程序退出时,记事本没有。我使用CreateProcess生成新进程。我也看到有人说在父进程和子进程之间建立一个管道就可以了,但我还没有尝试过。如果有人能给我一些提示,我将不胜感激。更新:如果没有,WINAPIAssignProcessToJobObject将无法工作|在CreatProcess中创建CREATE_BREAKAW

c++ - 将 Child 对象数组传递给接受 Parent* 的函数

我在功能有限的嵌入式平台上工作,因此vector/STL不可用。这可能是一个微不足道的问题,但我在C++方面没有太多经验(只有C和C#,这可能使我对明显的C++方法视而不见)。考虑以下示例:classParent{};classChild:publicParent{};voidTest(Parent*parents,uint8_tparentCount){//Accessingparent[x]isproblematicwhen'parents'containsaderivedtype}intmain(){//ThisisOKParentparents[3];Test(parents,

c++ - std::allocator 中 "destroy" "destructor" "deallocate"之间的区别?

在C++std::allocator中,有三个方法与一个共同的概念相关:解除分配销毁析构函数我想知道:从内存管理的角度来看,它们之间有何不同?我什么时候应该使用这个而不是那个?谢谢!编辑:更具体的疑问:一开始不好意思笼统地说,这里有一些我不明白的地方。析构函数是做什么的?文档没有说到析构函数调用时内存是否会自动释放destroy用于调用对象的析构函数,这里的“对象”是什么意思?再次感谢! 最佳答案 只是来自cppreference.comdocumentation的简短描述为我非常清楚地解释差异"1.Whatdoesdestruct

c++ - 如果对象是普通可构造/可破坏的,是否允许 STL 容器跳过调用 allocator::construct 和 allocator::destroy?

问题在标题中。容器是否允许这样做,或者分配器的方法是否保证被调用,即使对象是微不足道的可构造/可破坏的?我确实尝试搜索此内容,但空手而归...但如果重复,请告诉我。 最佳答案 §23.2.1[container.requirements.general]/p3:Forthecomponentsaffectedbythissubclausethatdeclareanallocator_type,objectsstoredinthesecomponentsshallbeconstructedusingtheallocator_trait