我有下面这个C++11语法结构:
#include <vector>
#include <memory>
class X {
public:
void f(void) { }
};
class Y : public X {
public:
void g(void) { }
};
class A {
private:
std::vector <std::unique_ptr <X> > xs;
public:
void addX(std::unique_ptr <X> &ref) {
xs.push_back(std::move(ref));
}
};
int main() {
A a;
std::unique_ptr <Y> y(new Y());
y->f();
y->g();
std::unique_ptr <X> x(y.release());
a.addX(x);
return 0;
}
在主函数中,我试图构建一个类型为 Y 的对象,然后将其添加到 a 的 X 对象向量中。但是,我不能直接使用
a.addX(y)
,因为 std::unique_ptr <Y>
无法转换为 std::unique_ptr <X>&
。这就是我想出的解决方法,即使用已释放的 y 内部指针初始化另一个唯一指针 x。虽然这样可以实现,但似乎不是最好的解决方案。是否有更好的方法将类型为
std::unique_ptr<Y>
的对象作为类型为 std::unique_ptr<X>&
的参数传递?谢谢, - Stan
void addX(std::unique_ptr &ref) { xs.push_back(std::move(ref)); }
这是非常危险的代码。它将拥有权转移给了xs
容器,导致原始对象被析构并且指针被悬挂。 - Simple