答案是不会。
#include <iostream>
#include <string>
#include <memory>
class A {
public:
A() {
std::cout << "A" << std::endl;
}
~A() {
std::cout << "~A" << std::endl;
}
int a = 1;
};
class B : public A {
public:
B() {
std::cout << "B" << std::endl;
}
~B() {
std::cout << "~B" << std::endl;
}
int b = 2;
};
void print(std::shared_ptr<B> b) {
std::cout << "print sp use_count " << b.use_count() << ", a " << b->a << ",b" << b->b << std::endl;
}
void print(std::shared_ptr<A> a) {
std::cout << "print sp use_cout " << a.use_count() << ", a " << a->a << std::endl;
}
int main() {
std::cout << "scope 1 begin" << std::endl;
{
std::shared_ptr<A> pa {new B};
pa->a = 10;
print(pa);
}
std::cout << "scope 2 begin" << std::endl;
{
auto pb2 = new B();
pb2->b = 22;
pb2->a = 11;
std::shared_ptr<A> spa{pb2};
print(spa);
}
std::cout << "scope 2 end" << std::endl;
return 0;
}
运行结果:
scope 1 begin
A
B
print sp use_cout 2, a 10
~B
~A
scope 2 begin
A
B
print sp use_cout 2, a 11
~B
~A
scope 2 end