首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c++运算符重载,调用析构函数

c++运算符重载,调用析构函数
EN

Stack Overflow用户
提问于 2013-02-18 10:21:45
回答 3查看 1.5K关注 0票数 1

我正在尝试跟踪一个给定类创建了多少个对象。如果我在类中重载操作符++,析构函数就会被调用,但我不知道为什么。更具体地说:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class num{
public:
    virtual void setValue(int)=0;
    static int db;
    num(){}
    ~num(){}
};

int num::db = 0;

class int32: public num{
public:
    // GET
    int getValue();

    // SET
    void setValue(int f);

    // constructor
    int32()
    {
        cout << "Construction..."<<endl;
        this->value = 0;num::db++;
    }

    // destructor
    ~int32()
    {
        cout << "destruction..."<<endl;
        num::db--;
    }

    // operators
    int32 operator++(int);
    int32 operator++(void);

protected:
    int value;
};

int32 int32::operator ++()
{
    this->value++;
    return *this;
}

int32 int32::operator ++(int)
{
    this->value++;
    return *this;
}

int main()
{
    int32 i;
    i.setValue(20);

    cout << (i++).getValue()<<endl;
    cout << (++i).getValue()<<endl;

    cout << num::db;

    cout << endl << "End of execution.";
    return 1;
}

结果是:构建...21毁灭...22破坏...-1 \f25 execution.destruction-1\f6结束...

所以在++i和i++之后会调用析构函数,但是为什么呢?

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-18 10:24:33

这是因为你退回了一份副本。您可能希望创建一个复制构造函数。

票数 3
EN

Stack Overflow用户

发布于 2013-02-18 10:24:49

您将在++操作符中返回该对象的副本。

每次调用return *this时,实际上都会创建一个对象副本,该副本将被传递给调用代码。

票数 1
EN

Stack Overflow用户

发布于 2013-02-18 10:25:22

这是因为您的"operator++()“方法都返回一个"int32”的副本。因此,对于每个调用,都会创建并返回一个新实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14933993

复制
相关文章
重复组合
我们一共有n个区间,区间xi的元素个数表示第i个元素被抽出的次数。由于区间的元素个数可以为0,因此我们需要n+1个隔板来区分这些区间。
灯珑LoGin
2022/10/31
4900
Python - 删除列表中的重复字典
Python 是一个非常广泛使用的平台,用于 Web 开发、数据科学、机器学习以及自动化执行不同的过程。我们可以将数据存储在python中,以不同的数据类型,例如列表,字典,数据集。python字典中的数据和信息可以根据我们的选择进行编辑和更改
很酷的站长
2023/08/11
3601
Python - 删除列表中的重复字典
如何去掉列表中重复的元素
列表,在Python中是最常见的一种数据类型,对它了解的越多,编程的效率就越高。
TalkPython
2019/10/29
7.8K0
如何去掉列表中重复的元素
卷积神经网络中的参数共享/权重复制
参数共享或权重复制是深度学习中经常被忽略的领域。但是了解这个简单的概念有助于更广泛地理解卷积神经网络的内部。卷积神经网络(cnn)能够使那些通过网络馈送的图像在进行仿射变换时具有不变性。这个特点提供了识别偏移图案、识别倾斜或轻微扭曲的图像的能力。
deephub
2020/07/24
2.1K0
卷积神经网络中的参数共享/权重复制
Python——去除列表中的重复元素
set(['I', 'I', 'M', 'E']) set(['I', 'E', 'M']) 集合中,没有重复的元素。利用集合这种数据结构的特性,可以去除列表中的重复元素。 一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数。 from collections import Counter a = [1,4,2,3,2,3,4,2] b = Counter(a) #求数组中每个数字出现了几次 print(b)
瑞新
2020/07/07
5K0
python中删除列表中重复元素
在面试中,很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下边给出三种方法来实现这个功能。
全栈程序员站长
2022/09/07
4.1K0
【说站】Python删除列表中的非字母字符
如果不是字符 a 到 z(大写和小写),则会导致匹配。匹配项被替换为空白字符。您可以将您想要的任何内容放入替换参数中。
很酷的站长
2022/11/24
2.5K0
【说站】Python删除列表中的非字母字符
电话号码的字母组合
难度:中等 来源:17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:
用户4456933
2021/06/01
4550
电话号码的字母组合
快速在组合中查找重复和遗失的元素
? ? ? ? ? ? ? ?
望月从良
2018/09/29
4.4K0
快速在组合中查找重复和遗失的元素
电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下,即与电话按键相同。注意1不对应任何字母。
WindRunnerMax
2020/08/27
4350
使用Python,怎么去除列表中重复的内容?
问:使用Python,怎么去除列表中重复的内容? 今日分享的内容,很简单,很常用。话不多说,直接开始。 mylist = ["a", "b", "a", "c", "c"] mylist = list(dict.fromkeys(mylist)) print(mylist)
TalkPython
2020/12/29
3.6K0
Python中如何获取列表中重复元素的索引?
昨天分享了一个文章,Python中如何获取列表中重复元素的索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强的代码出来,这里拿出来给大家分享下,一起学习交流。
前端皮皮
2022/08/17
13.5K0
Python中如何获取列表中重复元素的索引?
LeetCode - 电话号码的字母组合
原题地址:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
晓痴
2019/07/24
5770
LeetCode - 电话号码的字母组合
组合模式在商品分类列表中的应用 顶
{"id":100,"name":"根目录","takeCareProducts":[{"id":200,"name":"可乐","takeCareProducts":[{"id":1,"model":"500ml","name":"可口可乐","price":3}]},{"id":300,"name":"咖啡","takeCareProducts":[{"id":2,"model":"600ml","name":"雀巢咖啡","price":6}]}]}
算法之名
2019/08/20
2K0
组合问题——LeetCode题目17:电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
二环宇少
2020/08/13
6060
组合问题——LeetCode题目17:电话号码的字母组合
11 - 去掉列表或元组中的重复元素
在python 中如何定义集合,集合与列表有什么区别 # 列表 a = [1, 2, 3, 4, 5] print(type(a)) # 元组 b = (1, 2, 3, 4, 5) print(type(b)) # 集合 c = {1, 2, 3, 4, 5} print(type(c)) <class 'list'> <class 'tuple'> <class 'set'> # 区别: # 1. 集合没有重复的元素,而列表可以有重复的元素 a = [1, 2, 2, 3, 4] print(a)
ruochen
2021/05/22
3.6K0
11 - 去掉列表或元组中的重复元素
python 列表的排列组合
permutations/combinations/combinations_with_replacement
用户5760343
2019/09/30
1.3K0
如何更稳健的计算组合最优权重(附代码)
今天分享的论文是Marcos López de Prado 2019年的论文《A ROBUST ESTIMATOR OF THE EFFICIENT FRONTIER》本文主要有两个创新点。
量化投资与机器学习微信公众号
2021/07/29
2.6K0
17. 电话号码的字母组合
示例 1: 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = "" 输出:[] 示例 3: 输入:digits = "2" 输出:["a","b","c"]
CaesarChang张旭
2021/06/22
2830
17. 电话号码的字母组合
点击加载更多

相似问题

具有重复列表的所有组合

11

获取具有重复值的列表的所有组合

15

如何创建具有特定重复模式的字母/数字列表?

17

获取具有k号字母列表的所有n号组合。

12

如何获得具有重复值的列表的所有组合

322
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文