destructor相关内容

传递类按值时,调用方或被调用方是否调用析构函数?

假设我有以下(经过精简的)代码: class P {P();P(const P&);〜P();}无效foo(P x){...}无效bar(){P p {};foo(p);//编译器使用P::( const P&)构造x的值...//编译器在p上调用P ::〜P()} 编译器必须创建 p 的副本才能调用 foo ,因此 caller 会在调用之前调用副本构造函数.我的问题是,谁负责破坏这个创 ..
发布时间:2021-04-30 19:31:13 C/C++开发

限制对C ++构造函数和析构函数的访问

请原谅我是否已被问到,我没有找到具体问题的答案. 我在一个正在制作的库中有一个类,我希望某些类能够创建和销毁,而其他类则能够访问其他公共功能.拥有 friend class 也不是我想要的,因为friend class可以访问不需要的成员变量和成员函数.我偶然发现了这个习惯用法,它几乎可以正常工作,但析构函数除外,因为它不能采用其他参数.有了这个成语,我得到了: B类;A级{上市:Lif ..
发布时间:2021-04-24 19:23:59 C/C++开发

插入无序的地图调用构造函数

为了避免元素重复,我正在构建一个包含元素并为其提供访问权限的类. 我的元素( DynLibrary )是可移动的,但不可复制 class DynLibrary{上市:DynLibrary():_handle(nullptr){}DynLibrary(const std :: string& path){DynLibrary :: open(path);}DynLibrary(const ..
发布时间:2021-04-20 18:47:53 C/C++开发

通过"this"指向析构函数中其他类/函数的指针

在某些主对象的析构函数中的堆栈上创建一个工作对象并将主对象的 this 指针传递给帮助对象,这是合法的C ++吗?然后,辅助对象还将调用主对象的成员函数或访问成员变量. 换句话说,下面的合法C ++吗? struct MasterClass{MasterClass(int数据);〜MasterClass();整数数据;};struct WorkerClass{WorkerClass(Ma ..
发布时间:2021-04-20 18:37:21 C/C++开发

为什么不能在析构函数可以的同时显式调用构造函数?

在下面的C ++代码中,允许我显式调用析构函数,但不能显式调用构造函数.这是为什么?不会在dtor案件中明确要求更富有表现力和统一吗? class X {};int main(){X * x =(X *):: operator new(sizeof(X));新的(x)X;//选项#1:确定x-> X();//选项#2:错误x->〜X();:: operator delete(x);} 解决 ..

如果在派生类中定义了虚拟析构函数,而不是层次结构的顶层定义了怎么办?C ++

我想知道定义没有虚拟析构函数的基类并定义具有虚拟析构函数的继承类是否正确?如果我这样做实际上会发生什么? 解决方案 如果您删除p ,其中 p 的类型为 X * ,但是实际上指向从 X 派生的 Y ,除非 X 具有 virtual 析构函数,否则您具有未定义的行为.如果 Y 的析构函数是 virtual ,但是 X 的析构函数不是,则它完全不变. ..
发布时间:2021-04-19 20:35:28 C/C++开发

继承中调用构造函数的顺序

我是C ++编程语言的新手,我对在继承中调用构造函数的顺序感到困惑.我的问题是,即使派生类没有继承构造函数和析构函数,为什么当我创建派生类对象时基类构造函数也会调用. 解决方案 构造函数的目的是定义如何初始化数据成员.由于派生类继承了基类的数据成员,因此派生类的任何构造函数不仅必须定义如何初始化派生类所特有的数据成员,而且还必须定义来自基类的数据成员. 执行此操作的自然方法(C ++ ..
发布时间:2021-04-19 20:19:32 C/C++开发

显式默认的析构函数禁用类中的默认move构造函数

我遇到了一个问题,那就是当超类的子类具有显式默认的析构函数时,超类的move构造函数无法正确调用.隐式默认使用析构函数时,将调用move构造函数(在supclass定义中完全未提供). 我知道约束,编译器应将其应用于默认的move构造函数.但是,我已经完全确定,在应用这些规则时,编译器不应区分显式/隐式默认析构函数(或构造函数).换句话说,明确默认的析构函数不应视为用户定义的析构函数(与 ..
发布时间:2021-04-19 20:12:34 C/C++开发

为什么C ++对象具有默认析构函数?

例如,当我不声明构造函数时,编译器将为我提供一个默认构造函数,该构造函数将不带参数且没有定义(空主体),因此将不执行任何操作 因此,例如,如果我完成了一个对象,默认析构函数是否会重新分配该对象使用的(空闲)内存?如果没有,我们为什么要得到它? 而且,也许相同的问题也适用于默认构造函数.如果什么都不做,为什么默认情况下会为我们创建它? 解决方案 说编译器生成的默认构造函数不执行任 ..
发布时间:2021-04-19 18:47:00 C/C++开发

析构函数中的异步操作

尝试在类析构函数中运行异步操作失败. 这是代码: 公共类执行器{公共静态void Main(){var c1 = new Class1();c1.DoSomething();}}公共课Class1{公共无效DoSomething(){}private int _i = 100;private int _j = 100;〜Class1(){Task.Run(()=> _j * = 2);// ..
发布时间:2021-04-12 19:11:10 C#/.NET

避免在复制构造函数和operator =中重复相同的代码

在c ++中,当类包含动态分配的数据时,通常合理的是显式定义副本构造函数,operator =和destructor.但是这些特殊方法的作用是重叠的.更具体地说,operator =通常首先进行一些销毁,然后进行处理,类似于复制构造函数中的操作. 我的问题是如何以最佳方式编写这种代码,而不必重复相同的代码行,也不需要处理器进行不必要的工作(例如不必要的复制). 我通常会得到两种帮助方法 ..

使用`__destruct`来实现默认路由?

我正在更新我编写的PHP框架。它过去只是使用默认行为进行路由。例如,考虑请求转到 domain.com/package/controller/method ... $ url = [“ package”,“ controller”,“ method”]; //检查软件包是否存在... //检查控制器是否存在于软件包中... //检查方法是否存在于控制器中... 这一切都很好,而且 ..
发布时间:2020-10-21 02:49:33 PHP

虚拟功能无法正常运行

可能重复: 具有虚拟函数和可访问的非虚拟析构函数的类 我是从thenewboston的教程中获得的代码: #include 使用命名空间std; 类敌人{ public: virtual void Attack(){}; }; 类忍者:公开敌人{ 公共: void Attack(){ cout ..
发布时间:2020-10-21 02:49:30 C/C++开发

PHP __destruct导致net :: ERR_CONNECTION_RESET register_shutdown_function不是。有什么不同?

所以我有以下问题。 我有一个会话类,应在请求执行结束时将其数据保存到数据库中。基本上,当它被破坏时。 在这种情况下,我使用的是单例模式。 我有一个这样的析构函数: 公共函数__destruct() { $ this-> _save(); // _save是public //退出(“我可以毫无错误地到达这一点”); } 但是使用该代码,我从chrome和其他浏 ..
发布时间:2020-10-21 02:49:26 PHP