【发布时间】:2020-04-28 20:35:08
【问题描述】:
class Base {
public:
Base() {}
virtual void print()const = 0;
protected:
virtual ~Base() { std::cout << "Base destructor\n\n"; }
};
int main()
{
//std::vector<std::unique_ptr<Base>> v1;
//The line above won't compile because: 'Base::~Base': cannot access protected member declared in class 'Base'
std::vector<std::shared_ptr<Base>> v2;
return 0;
}
在创建向量时试图调用析构函数是什么?为什么它不会针对 unique_ptr 向量进行编译,而是针对 shared_ptr 向量进行编译?
【问题讨论】:
-
这能回答你的问题吗? shared_ptr magic :)
-
嘿,评论什么时候从可能重复变为这回答了你的问题吗:P
-
@appleapple 谢谢。你提到的问题很有帮助。 Kerndog73 和 Evg 的答案更直接地解决了我遇到的问题。
-
@appleapple meta.stackexchange.com/q/337013/155739
-
@LightnessRacesBY-SA3.0 谢谢,好吧,我不太喜欢新的措辞:/
标签: c++ shared-ptr destructor unique-ptr