【发布时间】:2021-07-19 15:19:02
【问题描述】:
通过查看示例:
#include <iostream>
int wow=0;
class Foo{
int cow = 0;
public:
Foo(){
std::cout << "Foo +\n";
cow = 0;
++wow;
}
Foo(int n){
std::cout << "Foo has " << n << "\n";
cow = n;
++wow;
}
~Foo(){
std::cout << cow << " ~ Foo -\n";
}
void print(){
std::cout << cow << " is the foo#\n";
}
};
int main(){
void * bar = ::operator new(sizeof(Foo));
Foo * a = new(bar) Foo;
*a = Foo(10);
std::cout << wow << std::endl;
a->~Foo();
::operator delete(bar);
return 0;
}
编译运行,控制台显示:
Foo+
Foo has 10
10 ~ Foo -
2
10 ~ Foo -
我的问题是,为什么在调用构造函数时要调用析构函数?
第一个析构函数调用应该是 0 ~ Foo - 吗?因为那是第一个 Foo
被Foo(10)覆盖?
【问题讨论】:
-
你没有看到复制构造函数
-
你如何编译这个?我收到一些错误godbolt.org/z/qM1cj9W3s
-
将
void bar固定为void * bar,请查看@largest_prime_is_463035818 -
添加牛成员,我忘了那个对不起
标签: c++ class constructor destructor copy-assignment