【发布时间】:2017-02-18 23:23:11
【问题描述】:
考虑以下类:
class MyInterface1 {
...
};
class MyInterface2 {
...
};
class MyClass : public MyInterface1, public MyInterface2 {
...
};
如果我有以下代码:
void MyFunction(shared_ptr<MyInterface1>& out); // returns a make_shared<MyClass>
shared_ptr<MyInterface1> c1;
shared_ptr<MyInterface2> c2;
MyFunction(c1);
c2 = c1;
我无法将 c2 分配给 c1。
此外,如果我只调用MyFunction(c2),它也不会编译,因为 MyClass 是从 MyInterface1 和 MyInterface2 派生的,所以我希望它可以工作。这似乎是一个值得分享的编译器错误(Visual Studio 2015 Update 3)。谁能重现这个?
【问题讨论】:
-
不,这不是编译器错误。
-
这与
shared_ptr无关,这也不适用于原始指针。 -
MyClass可以是MyInterface1或MyInterface2,但MyInterface1和`MyInterface2 之间没有关系。 -
仅仅因为你碰巧有一个
MyClass结合了MyInterface1和MyInterface2并不意味着MyInterface1的所有可能派生都具有相似的相关性。为什么编译器要做出这样的假设?
标签: c++ c++11 shared-ptr