gpt4 book ai didi

没有构造函数的c++类成员初始化

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:20 28 4
gpt4 key购买 nike

谁能解释一下 C++ 中的内存分配和初始化是如何工作的?

File Test.h
-----------
class Test
{
public:
Test();

void clearSet();

private:
std::set<std::string> m_SetStringMember;
int m_initMe;
}

File Test.cpp
-------------

Test::Test():m_initMe(0)
{}

Test::clearSet()
{
m_SetStringMember.clear();
}

我的理解是:
int成员(member)m_initMe在构造函数中正确初始化,因此在内存中具有有效地址和有效值。
但是 m_SetStringMember 会发生什么? ?
它必须在内存中有一个有效的地址吗?
它是否必须具有有效的默认值?
std::set<std::string>() 的默认构造函数设置?
或者我必须明确设置 m_SetStringMember = std::set<std::string>()在构造函数中?

最佳答案

But what happens with the m_SetStringMember? Does it has to have a valid address in memory?

是的,但地址与构造函数无关。只有在编译器或堆分配器为对象提供有效地址后,构造函数才会初始化对象。

Does it has to have a valid default value?

Set by the default constructor of std::set()?

Or do I have to explicitly set m_SetStringMember = std::set() in the constructor?

如果你想明确的做这个

Test::Test() : m_initMe(0), m_SetStringMember() {}

但默认情况下会发生同样的事情。

关于没有构造函数的c++类成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334248/

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