-
4 votesanswersviews
当超出范围时,局部变量删除另一个变量的内存[重复]
这个问题在这里已有答案: What is The Rule of Three? 8个答案 在设计一个动态分配内存的类时,我遇到了有关内存分配的以下问题 . 我希望你们中的一些人能够指出我如何以更好的方式设计课程 . 我的类动态分配内存,因此也在析构函数中删除它 . 为了说明问题,请考虑以下愚蠢的类声明: class testClass{ int* data; public: t... -
4 votesanswersviews
无法访问singleton类析构函数中的私有成员
我正在尝试实现这个单例类 . 但是我遇到了这个错误: 'Singleton :: ~Singleton':无法访问类'Singleton'中声明的私有成员 . 这在头文件中标记,最后一行包含右括号 . 有人可以帮我解释导致这个问题的原因吗?以下是我的源代码 . Singleton.h: class Singleton { public: static Singleton* Instance... -
13 votesanswersviews
类中的纯虚析构函数定义会产生编译错误
基类中的 pure virtual destructor 应该有一个定义 . 否则编译器将在链接时生成从派生类析构函数调用基类析构函数,并将导致链接错误 . 我试图在基类中定义纯虚拟析构函数,如下所示: class base { public: base() { cout << "constructor in base clas... -
0 votesanswersviews
内联析构函数和静态volatile变量
我正在尝试使用易失性静态变量编写一个非常简单的内存大小计数器来跟踪某个类中的分配 . 我've written the class'析构函数以原子方式递减这个静态的volatile整数,但是编译器(VC VS2010)将它优化掉(内联它,尽管它不应该 - 析构函数中的变量是易变的,也许它应该考虑到这一点......?) . 相反,析构函数似乎永远不会被调用(即类的成员被正确处理掉,但显然不使用自定... -
0 votesanswersviews
为什么命运者以相反的顺序打电话? [重复]
这个问题在这里已有答案: Reason reqd for the order of destructor call .? 4个答案 在继承中为什么析构函数以相反的顺序调用为构造函数? #include "stdafx.h" #include <iostream> class Base { int value ; public : Base()value{0... -
295 votesanswersviews
我是否需要显式调用基本虚拟析构函数?
在C中覆盖一个类(使用虚拟析构函数)时,我在继承类上再次将析构函数实现为虚拟,但是我是否需要调用基础析构函数? 如果是这样,我想它就是这样...... MyChildClass::~MyChildClass() // virtual in header { // Call to base destructor... this->MyBaseClass::~MyBaseClas... -
-1 votesanswersviews
三规则 . 复制构造函数,赋值运算符实现[关闭]
三规则 . 复制构造函数,赋值运算符实现 #include <iostream> using namespace std; class IntPart { public: IntPart(); // default constructor IntPart(int n); private: unsigned int* Counts; unsigned int numPart... -
0 votesanswersviews
在继承中调用构造函数的顺序
我是C编程语言的新手,我对继承中调用构造函数的顺序感到困惑 . 我的问题是,即使构造函数和析构函数不是由派生类继承的,为什么基类构造函数在创建派生类对象时会调用它 . -
43 votesanswersviews
在C中调用析构函数和构造函数的顺序是什么
在C中调用析构函数和构造函数的顺序是什么?使用一些基类和派生类的示例 -
0 votesanswersviews
为什么析构函数不会以相反的顺序调用对象数组?
在C语言中以与对象创建相反的顺序调用析构函数,但我不明白为什么不为对象数组维护它 . #include <iostream> using namespace std; class test { int nmbr; static int c; public: test(int j) { cout<<"construct... -
-1 votesanswersviews
如何破坏 Map 并在C中填充 Map 指针?
如果我们创建 map<int,int> ,我们可以清除它但它仍然留在内存中,对吗?例如 . #include <map> using namespace std; int main(){ map<int,int> myMap; myMap[1] = 2; myMap.clear(); return 0; } 但是如果我们设置一个指... -
59 votesanswersviews
C中的对象破坏
究竟是什么物体在C中被摧毁,这意味着什么?我是否必须手动销毁它们,因为没有垃圾收集器?例外是如何发挥作用的? (注意:这是Stack Overflow的C FAQ的一个条目 . 如果你想批评在这个表单中提供常见问题解答的想法,那么发布所有这些的meta上的帖子就是这样做的地方 . 这个问题在C聊天室中受到监控,其中FAQ的想法首先出现在那里,所以你的答案很可能被那些提出这个想法的人阅读 . ) -
6 votesanswersviews
如何在Delphi中模拟TFrame上的OnDestroy事件?
如何在Delphi中为 TFrame 模拟 OnDestroy 事件? 我简单地在我的框架中添加了 constructor 和 destructor ,认为这是 TForm 的作用: TframeEditCustomer = class(TFrame) ... public constructor Create(AOwner: TComponent); override; destr... -
1 votesanswersviews
当对象被销毁时,Delphi对象字段中的动态数组是否会被自动释放/释放?
如果我有一个包含带动态数组的字段的Delphi对象(包含例如字符串),如下所示: TClassWithDynArrayField = class(TObject) public some_dyn_array : array of string; end; 当对象被销毁时,这个数组(和/或它的内容)会被自动释放/释放,还是我必须在对象的析构函数中以某种方式显式地完成它以避免... -
51 votesanswersviews
C构造函数/析构函数继承
EDIT : Summary of answers 在下文中,B是A的子类 . 这是一个术语问题;继承了ctors和dtors,因为B的ctor / dtor不会从A的界面借用 . 一个类至少有一个构造函数,并且只有一个析构函数 . Constructors : B不从A继承构造函数; 除非B的ctor明确地调用A的ctor之一,否则A的默认ctor将在B的ctor主体之前自动调用(这... -
0 votesanswersviews
如何从复制赋值运算符调用复制构造函数?
我正在实施一个链表 . 我写了一个拷贝构造函数: // --- copy constructor --- IntList(const IntList& last_list) { first = new IntNode(last_list.getFirst()->getData()); cout << "copy first... -
-3 votesanswersviews
关于析构函数,复制构造函数和赋值运算符的C练习考试
这是我明天在CS下级课程中考试的练习考试的问题 . 不幸的是,练习考试没有完全正确的解决方案;该问题中显示的具体问题已经获得了a),b)和c)部分中每个部分的半信用 . 问题是为什么他们只得到半信用;如果您可以对问题的一个或所有部分发布完整的解决方案,那将是非常有 Value 的 . 问题如下: 考虑一个代表建筑 Worker 的相当普通的类的摘录 . class Worker { publ... -
227 votesanswersviews
从析构函数中抛出异常
大多数人都说永远不会从析构函数中抛出异常 - 这样做会导致未定义的行为 . Stroustrup指出"the vector destructor explicitly invokes the destructor for every element. This implies that if an element destructor throws, the vector destru... -
0 votesanswersviews
在c中,一旦程序退出,单个(静态实例)将被销毁的原因是正确的
提前致谢! 参考有效c项目4,Scott Meyers表示,一旦main()退出,所有静态变量/实例都将被销毁 . 在这里,我们假设单例仅用于main() . 实际上,我们知道如果我们使用以下两种形式的单例,一旦main()退出,实例将被自动销毁 . 但是我想区分下面两个原因,哪一个是释放单身人士的直接原因?顺便说一句,这两种形式有什么区别? Reason: 一旦main()退出, 普通实例将... -
2 votesanswersviews
如何在Qt中创建线程网络服务器?
我正在使用线程telnet服务器(每个连接一个线程),并且无法弄清楚如何摆脱valgrind错误 . 我把问题缩小到了删除tcpsocket的地方 . 我在QThread的run()方法中创建了QTcpSocket: void TelnetConnection::run() { tcpSocketPtr = new QTcpSocket(); if (!tcpSocketPtr... -
136 votesanswersviews
为什么我们需要在C中使用纯虚拟析构函数?
我理解虚拟析构函数的必要性 . 但为什么我们需要纯虚拟析构函数?在其中一篇C文章中,作者提到我们在创建类抽象时使用纯虚析构函数 . 但是我们可以通过将任何成员函数设置为纯虚拟来使类抽象化 . 所以我的问题是 我们什么时候才能真正使析构函数变为虚拟?任何人都能给出一个很好的实时例子吗? 当我们创建抽象类时,将析构函数设置为纯虚拟是一种很好的做法吗?如果是..那为什么? -
89 votesanswersviews
什么时候被称为C析构函数?
基本问题:程序何时在C中调用类的析构函数方法?有人告诉我,只要一个物体超出范围或受到一个 delete 更具体的问题: 1)如果通过指针创建对象并且稍后删除该指针或给出指向的新地址,那么它所指向的对象是否会调用其析构函数(假设没有其他指向它)? 2)关注问题1,什么定义了一个对象何时超出范围(不是关于对象何时离开给定的) . 那么,换句话说,什么时候是一个析构函数调用链表中的对象? 3)你想要手动... -
3 votesanswersviews
在派生类中重写哪个基类的虚析构函数
当派生类没有立即派生,但派生自已派生的类时,我对重写函数感到困惑 . #include <iostream> struct Base { virtual ~Base() { std::cout << "Base destructor called\n"; } }; struct Derived : Base { Derived() ... -
29 votesanswersviews
为什么在删除派生类对象时调用基类析构函数(虚拟)?
析构函数(当然还有构造函数)与其他成员函数之间的区别在于,如果常规成员函数在派生类中具有主体,则只会执行Derived类中的版本 . 在析构函数的情况下,派生以及基类版本都会被执行吗? 很容易知道在析构函数(可能是虚拟的)和构造函数的情况下究竟发生了什么,即使删除了最多派生的类对象,也会为它们的所有基类调用它们 . 提前致谢! -
389 votesanswersviews
如何正确清理Python对象?
class Package: def __init__(self): self.files = [] # ... def __del__(self): for file in self.files: os.unlink(file) __del__(self) 上面因AttributeError异常而失败 . 当 ... -
0 votesanswersviews
C语言中受保护的策略类析构函数
我写了以下愚蠢的政策结构: template <typename T> struct SuperLeague { public: void printLeague(){std::cout << "SuperLegue" << std::endl;}; protected: //~SuperLeague(){} }; 和主持人类 te... -
3 votesanswersviews
派生类中是否需要显式声明析构函数?
请考虑以下代码段: class A { virtual void function(); public: virtual ~A() {}; } class B: public A { virtual void function() override final; public: /*virtual*/ ~B() {}; // does this d-tor have to be decl... -
0 votesanswersviews
程序几乎完成后出现错误 - CRT检测到应用程序在堆缓冲区结束后写入内存
我有这个小哑的程序,我必须为我的 class 做些什么 . 它工作正常,它输出正确,但最后Visual Studio说该程序触发了一个断点,在我按下继续后它显示了这个: ERROR1 在按下“Ismét”(再次表示)之后,它再次向我显示Visual Studio断点窗口,并且在执行此操作5次后(每次尝试显示不同的错误)程序关闭 . ERRORS 我发现 free 命令试图清除一些垃圾,因为没有指定...