gpt4 book ai didi

c++ - 构造函数中的智能指针

转载 作者:行者123 更新时间:2023-11-28 03:04:56 25 4
gpt4 key购买 nike

故事是:我必须为我的编程类(class)创建一个类(class),并且我的自定义项目( spaceship - 是的,我有点喜欢)正在进行中。但是我发现了一个我无法简单解决的问题。以下是我认为重要的一些代码:

标题

class SpaceMarine
{

public:
...
SpaceMarine(); // default constructor
SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
std::auto_ptr<Pancerz> armor, Bron& weapon);

private:

std::string name_;
unsigned int ranga_;
Statystyki* stats_;
std::auto_ptr<Pancerz> armor_;
Bron* weapon_;
Experience experience_;

只是说清楚:“Statystyki”、“Pancerz”和“Bron”是主类 SpaceMarine 的成员类。项目需求:我要做一个智能指针(这里是auto_ptr)。

.CPP

SpaceMarine::SpaceMarine()
{
name_ = "John";
stats_ = new Statystyki();
weapon_ = new Bron();
std::auto_ptr<Pancerz> armor_(new Pancerz());


ranga_ = 0;
}
SpaceMarine::SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
std::auto_ptr<Pancerz> armor, Bron& weapon)
: armor_(std::move(armor))
{
name_ = name;
ranga_ = rang;
stats_ = stats;
armor_ = std::move(armor);
weapon_ = weapon;
}

现在,问题开始的地方:这是“main.cpp”文件的一部分:

SpaceMarine SM1;
SpaceMarine SM2("Azrael", 3, S2, **P2** , B2);

//S - 统计数据,P - 护甲,B 类武器

这个叫做 P2 的小东西有问题,它应该是装甲的 auto_ptr。我之前声明了装甲对象 P2。我在将 auto_ptr“合并”到我的构造函数中时遇到问题。有什么想法吗?

此外,欢迎所有关于改进我的代码的建议:)

马特

附言。我的第一篇文章在这里! :D 对我放轻松 ^^

编辑

感谢 user1158692 整理我的代码感谢 Hansmaad 和 user1158692我希望我能为这个问题做出正确的回答,因为两者都帮助我解决了这个问题;)

最后的代码供以后引用:

标题

SpaceMarine(std::string name, 
unsigned int rang,
Statystyki& stats,
Pancerz& armor,
Bron& weapon);

.CPP

SpaceMarine(std::string name, 
unsigned int rang,
Statystyki& stats,
Pancerz& armor,
Bron& weapon);

{
name_ = name;
ranga_ = rang;
stats_ = &stats;
std::unique_ptr<Pancerz> armor_(&armor);
weapon_ = &weapon;
}

//以及在 main.cpp 中声明它的示例

Bron B2("Chainsword" , 0, 6);

Pancerz P2("Power armor", 12);

Statystyki S2(6,6,4,8,20);

SpaceMarine SM2("Azrael", 3, S2, P2 , B2);

最佳答案

您只需将 auto_ptr 传递给您的构造函数即可。它将所有权转移到拷贝。但是,std::auto_ptr 已弃用,应由 std::unique_ptr 代替。

struct A {};
struct B
{
std::auto_ptr<A> a;
B(std::auto_ptr<A> a) : a(a)
{
}
};

struct C
{
std::unique_ptr<A> a;
C(std::unique_ptr<A> a) : a(std::move(a))
{
}
};

int main()
{
std::auto_ptr<A> a{ new A };
B b{ a };

C c{ std::make_unique<A>() };
}

关于c++ - 构造函数中的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980434/

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