gpt4 book ai didi

c++ - 将定义的类声明为模板参数内的结构

转载 作者:行者123 更新时间:2023-12-02 10:11:48 53 4
gpt4 key购买 nike

一个 类(class) A被定义和实现。后来它被声明为 结构 作为 std::unique_ptr 的模板参数.编译器(g++10.1)对此没有任何提示,程序可以运行。

#include <iostream>
#include <string>
#include <memory>

class A
{
public:
std::string info = "Hello World!";
};

int main()
{
std::unique_ptr<struct A> a{new A};
std::cout << a->info << "\n";
return 0;
}
如果我定义没有 new A
std::unique_ptr<struct A> a;
代码仍然可以编译,但在运行时出现段错误。那么为什么这可能呢?

最佳答案

允许混合classstruct在声明中,这只是类定义中的一个问题。引用 Mixing class and struct更多细节。
第二种情况下的 seg 错误来自空指针访问,这是一种未定义的行为。std::unique_ptr<struct A> a;初始化 a到“空”状态。然后a->info将访问一个空指针,在您的情况下会导致段错误。

关于c++ - 将定义的类声明为模板参数内的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63245755/

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