据我所知,我应该在析构函数中销毁我创建的所有内容new并关闭打开的文件流和其他流.但是,我对C++中的其他对象有些怀疑:
std::vector和std::strings:它们会自动销毁吗?
如果我有类似的东西
std::vector<myClass*>
Run Code Online (Sandbox Code Playgroud)
指向类的指针.调用向量析构函数时会发生什么?
它会自动调用析构函数myClass吗?或者只有矢量被破坏,但它包含的所有对象仍然存在于内存中?
如果我有一个指向类中另一个类的指针会发生什么,比如说:
class A {
ClassB* B;
}
Run Code Online (Sandbox Code Playgroud)
并且在代码中的某个点销毁A类.B类是否会被销毁,或者只是指针和B类仍将存在于内存的某个地方?
我正在使用std::shared_ptr,在我的软件开发过程中,我遇到了几个让我对内存管理产生怀疑的案例.我有一个第三方库,它总是给我提供函数的原始指针,在我的代码中我将它们转换为std::shared_ptr(从std而不是boost.顺便说一句,两者之间有什么区别?).所以我想说我有以下代码:
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
Run Code Online (Sandbox Code Playgroud)
现在当共享指针超出范围时会发生什么(假设它在函数中被声明为本地,现在我正在退出该函数).请问ClassA对象仍然存在,因为原始指针指向它?
我环顾四周,似乎问题不仅出现在树小部件上,也出现在其他小部件上.但就我而言,我找到了一个解决方案,虽然不完整.我正在向树窗口小部件添加操作,因此当您右键单击它时,会出现带有这些操作的弹出窗口.但是,当我向我的树窗口小部件添加项目并右键单击它们时,会出现相同的弹出窗口.我想要做的是,当您右键单击树窗口小部件时,会出现树窗口小部件弹出菜单,当您右键单击项目时,会出现另一个相应的弹出菜单.有人知道怎么做吗?
我正在使用Inno安装程序与一些dll一起安装我的工具.但是,我需要在安装过程中运行microsoft redistributable .exe.如何将其嵌入到设置过程中?
我需要在paraview中添加我自己的自制qt gui.我听说应该允许的paraview插件.但我没有找到它的教程.如何在Paraview中添加按钮,复选框,组合框?有人能告诉我一个例子吗?提前致谢
我注意到在QT中用shared_ptr替换原始指针时,我的代码不再起作用了.例如,如果不是
QTreeWidgetItem* vItem(new QTreeWidgetItem(ItemTitle));
Run Code Online (Sandbox Code Playgroud)
我用
std::shared_ptr<QTreeWidgetItem> vItem(new QTreeWidgetItem(ItemTitle));
Run Code Online (Sandbox Code Playgroud)
然后,程序崩溃或没有任何操作(即使我使用.get()函数在我的代码中稍后从共享的指针获取原始指针).有谁知道原因是什么?
我只是想知道OpenMP(共享内存)和MPI(分布式内存)如何能够在像i7这样的普通桌面CPU上运行.是否有某种虚拟机可以模拟这些CPU上的共享和分布式内存?我问它是因为当学习OpenMP和MPI时,会显示超级计算机的结构,共享内存或分布式内存的不同节点,每个节点都有自己的处理器和内存.
我试图在我的代码中使用auto_ptr,但显然出了问题.
auto_ptr<ClassType> Class(s.Build(aFilename)); //Instantiation of the Class object
int vM = s.GetM(Class);
int vS = s.Draw(Class);
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在实例化Class之后,Class对象存在,因此通过调用s.GetModelMean(Class),Class不为空.但退出函数GetM后,Class为空,因此不再可用.调用Draw函数时发生崩溃.
我按以下方式声明了这些函数:
int GetM(auto_ptr<ClassType> aM);
Run Code Online (Sandbox Code Playgroud)
似乎班级被摧毁了,但我不明白为什么......
我正在使用VTK进行可视化,我的代码充满了他们的智能指针,例如:
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
Run Code Online (Sandbox Code Playgroud)
我想知道如果New()以后不应该这样做Delete().或者VTK"自动"摧毁一切.很多时候使用Delete()我的代码崩溃.所以,我想知道我是否应该首先使用它,背后是什么New(),共享指针或类似的东西?
我写了一个很多用户会在他们的计算机上使用的工具.但是我注意到,没有安装visual studio的用户无法打开我的可执行文件.该错误表明msvcp100.dll丢失.我在互联网上发现了一个来自microsoft的可再发行软件包,显然应该提供这些dll.我的问题是:还有另一种方法可以绕过这个问题吗?像项目属性中的选项?
c++ ×5
qt ×2
auto-ptr ×1
c ×1
c++11 ×1
destructor ×1
inno-setup ×1
mpi ×1
openmp ×1
paraview ×1
pointers ×1
popupmenu ×1
qtreewidget ×1
regression ×1
shared ×1
shared-ptr ×1
statistics ×1
vtk ×1