因此,有时我希望一个对象具有对共享资源的引用(比如说 type A
),或者拥有自己的A
.
此外,对象可能会发现自己插入并在容器 ( vector
, list
, set
) 内进行操作。
到目前为止,我所知道的是,unique_ptr
如果我有一个要在容器中的多态类型,我将想要使用一个实现。因此,对于HasAnA
拥有 an 的类,A
能够放置在容器内,同时仍然允许其A
' 也是B
'(B
在这种情况下是 的派生类A
),它必须是这样的:
class A {
virtual void a() { std::cout << "A" << endl; }
payloadA payload;
};
class B: public A {
void a() { std::cout << "A(B)" << endl; }
void b() { std::cout << "B" << endl; }
payloadB payload;
};
class HasAnA {
std::unique_ptr<A> my_A; // this allows me to build a std::vector<HasAnA>
OtherStuff my_other_stuff;
};
所以这很好,我正在寻找的是如何实现一个我将调用的类RefersAnA
。我希望 aRefersAnA
要么拥有自己的 A 的所有权,要么引用其他东西拥有的 A。
让我们来看看。
class RefersAnA {
std::unique_ptr<A> my_A; // represents my own A: when I die, this A is dealloc'd
A* not_my_A; // someone else's A.
OtherStuff my_other_stuff;
RefersAnA () {
// in here is code that would skip initializing my_A if a valid A* was provided.
}
};
对我来说,这并不像我想要的那么友好。我可以制作某种模板类来抽象“作为资源的唯一 ptr 或资源的原始 ptr”的概念吗?它需要一位来说明它是两者中的哪一个,以及一个指针。