gpt4 book ai didi

c++ - 使用 std::shared_ptr 分配类成员

转载 作者:行者123 更新时间:2023-11-30 01:12:50 24 4
gpt4 key购买 nike

我的假设是,在下面的示例中,一旦 A 的实例在 func() 结束时超出范围,b 引用的内存将被释放,对吗?

class A{
public:
A() {
b = std::shared_ptr<char>(new char[100] { 0 } );
}
char* b;
}

void func {
A a;
}

最佳答案

不,不正确。 b类型为 char *然后你给它分配一个 shared_ptr<char> .你应该得到一个编译错误。

此外,构造函数是private ,另一个编译错误。

你如何访问bfunc() ?在A是私有(private)的.

显然你的练习不完整......所以我只是从你提供的开始。

另外我建议使用 unique_ptr如果您可以说它是一个独特的所有权(在我看来这似乎是)。

编译:

#include <memory>
#include <iostream>

class A {
public:

A() {
std::cout << "A created with unique pointer" << std::endl;
b = std::unique_ptr<char>(new char[100] {
0
});
}

~A() {
std::cout << "A destroyed" << std::endl;
}

private:
std::unique_ptr<char> b;
};

void func() {
A a;
}

int main() {
std::cout << "Call func()" << std::endl;
func();
std::cout << "func() called" << std::endl;
return 0;
}

并且在 func() 的末尾A被销毁并随之而来的是unique_ptr .

但是,问问你自己,你真的需要使用指针吗?在您的情况下,自动变量应该没问题;它做同样的事情(即在 func() 退出时被销毁。

关于c++ - 使用 std::shared_ptr 分配类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33428166/

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