按值分配成员对象:我的假设是否正确
Assign member object by value: Is my hypothesis correct?
我有几年的编程经验,但我对c++还是个新手。我不完全明白下面这行要做什么:
this -> obj = MyObject(param)
首先,我有以下假设发生了什么:
- 当调用MyObject(param)时,在堆栈上创建对象的本地版本。
- 这个对象也被复制到这个-> obj。
- 当程序离开当前范围(即该行所在的方法)时,调用对象的本地版本的析构函数。
正确吗?
第二:当它被创建时,obj被默认构造函数创建。何时调用该对象的析构函数?我假设,它发生在上面的行覆盖之前,但是我的调试输出表明,它发生在它被销毁的时候。
-
你最后的假设是错误的。临时的(你称之为local的)将在语句结束后立即销毁。
-
在
this -> obj = MyObject(param);
行中,obj
通过赋值运算符赋值给新的对象(有效地覆盖了成员)。但是覆盖并不意味着销毁(并且在相同的赋值操作符函数中,将不会调用析构函数)。obj
将在this
(父)被销毁时被销毁(尽管如果它是一个指针,你可以通过调用delete
来显式地销毁它)。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 假设相同的 lambda 表达式具有不同的类型是否安全?
- 本征是否假设混叠?
- 假设 C++11 中已知子级布局,重新插入基类是否安全
- 假设浮点数或双 NaN 将始终作为字符串"nan"是否安全?
- 是否不允许编译器假设 const-ref 参数将保持 const?
- 假设钻石继承打破了C++的封装是否正确?
- 假设sqlite3_exec数据库指针不更改其值是否为保存
- 是否可以安全地假设64位指针中的16个高位(2个对我来说足够了)是未设置的
- 我是否应该假设对象的析构函数在从 STL 容器中删除后立即调用?
- 假设所有Windows平台都在UCS-2 LE中是否安全
- 对象数组作为链表中的字符数组 - 我对对齐的假设是否有效
- 假设文件将被打开,我是否相当安全
- &= 是否保证表现得像假设的 &&= 运算符?
- 假设 .. 的值是否总是安全的。流::int_type 是 >= 0 除了 eof
- 我们是否可以假设下列任意一对浮点算术语句总是产生相同的结果?
- 使用concurrent_vector迭代器的算术:假设从迭代器中减去'begin ()'会给出索引是否安全?
- 按值分配成员对象:我的假设是否正确
- 结构件对齐 - 是否可以假设没有填充