gpt4 book ai didi

c++ - 将 smart_pointer 传递给构造函数与原始指针

转载 作者:行者123 更新时间:2023-11-30 03:08:41 24 4
gpt4 key购买 nike

假设我有一个像这样的多态类结构

class Base
{
//some implementation
};

class Deriv: public Base
{
//implementation
}

class Case1
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case1(A* a):a_(a)
{

}
};
class Case2
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case2(std::auto_ptr<A> a):a_( a.release() )
{

}
};

我有一个三级 case1/2,它拥有上面描述的那些多态对象之一。现在我需要将一个指向 Base/Deriv 对象的指针传递给 case1/2 类的构造函数,该类获得该对象的所有权。我应该将这个对象作为智能指针传递吗? auto_ptr 明确表示我正在照顾这个对象,或者允许原始指针(案例 1)允许更简单的语法,如

Case1 c(new Deriv);
//compared to
Case2 c(std::auto_ptr<Base>(new Deriv));

最佳答案

你需要传递一个智能指针并且你需要命名那个智能指针(例如,它不能是临时的):

std::auto_ptr<Base> p(new Deriv);
Case2 c(p); // this constructor would need to take the `auto_ptr` by reference
// so that it can steal ownership.

在您的第一个示例中,Case1 c(new Deriv);,如果在执行 new DerivCase1 对象在其构造函数中获取它的所有权。

在您的第二个示例中,您没有命名智能指针,在某些情况下该对象可能会泄漏。值得注意的是,这可能会发生 if you have more than one argument to a function .

关于c++ - 将 smart_pointer 传递给构造函数与原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com