在代码中,我有A,B和C三个类。我想要实现以下(简化后)的定义,其中B是需要拥有指针的类:
class C {
...
};
class B {
C *c;
B(C *c) : c(c) {
}
};
class A {
C c1;
B b1, b2;
// b2 leaks pointer to C
A() : b1(&c1), b2(new C()) {
}
};
当一个类A的实例被销毁时,它会销毁c1、b1和b2。理想情况下,销毁b2应该删除匿名的C实例,但是销毁b1不应该删除任何东西(因为c1将直接被A销毁)。您可以使用什么样的智能指针来实现这一点?或者,最好的解决方案是将所有权标志传递给B吗?
std::shared_ptr
即使允许这些诡计,但如果默认删除器不同(如null删除器),则必须手动设置正确的删除器。或者,使用指向拥有对象的shared_ptr
以获得完全正确的语义。 - Deduplicatorshared_ptr
зҡ„еҶіе®ҡдёҺдј йҖ’жүҖжңүжқғж Үеҝ—зҡ„ж–№ејҸзӣёеҗҢпјҢз”ҡиҮіеҸҜд»ҘжҢүз…§жҲ‘第дәҢз§Қжһ„йҖ ж–№ејҸжӣҙеҘҪең°иҝӣиЎҢгҖӮ - Deduplicatorstd::shared_ptr
来合理地完成。这并不意味着在OP的情况下这样做是有道理的,但是可能会这样做。 - Deduplicator