C 用数组作为成员创建对象
c++ create object with an array as member
我是C 的新手(来自Java(,实际上我正在努力下列的:让foo成为一类
int bar[10] = {};
Foo::Foo()
{
bar[1] = 42;
}
和dosmth((主要类中的一种方法:
Foo doSmth(){
Foo f;
f.bar[0] = 10;
return f;
}
主要将是:
int main(int argc, char *argv[])
{
Foo f = doSmth();
cout << f.bar[1] << endl;
cout << f.bar[0] << endl;
return 0;
}
这是返回doSmth()
中 foo
-object的正确方法吗?我想在堆栈上创建对象,但是我担心FOO对象的array (bar)
,什么时候会从堆栈中删除?
这是返回dosmth((中的foo对象的正确方法?
肯定是。
我想在堆栈上创建对象
你有。
,但我担心foo对象的数组(bar(
bar
不是"来自foo
"。bar
是一个全局静态对象。
f.bar[1]
这是不适的,因为bar
不是Foo
的成员。要声明成员,它必须在类的定义内部:
struct Foo {
int bar[10] = {};
};
什么时候将其从堆栈中删除?
如果bar
具有静态存储,例如在您的代码中,则在程序结束时将其销毁。如果是(非静态(成员,则当它的完整对象被破坏时,即包含它的Foo
的实例。
如果 bar
是您类Foo
的非静态数据成员,则bar
- foo
-object的 CC_13 -content将是foo
-Object的一部分;它将位于foo
所在的位置(在堆上,在堆上,...(,一旦foo
被创建或破坏,它将被创建和破坏。
如果bar
是静态数据成员,那么它将在您的完整程序中存在一次,并且将"实时"直到程序完成为止。
这是返回foo
对象的正确方法?
是的,必须通过值返回本地创建的对象。通常,编译器将创建对象,并将副本优化。您可以在此处阅读有关返回本地对象的更多信息:https://isocpp.org/wiki/faq/ctors#return-local-var-var-var-var-y-value-optimization
我想在堆栈上创建对象,但是我担心foo
对象的bar
,何时将其从堆栈中删除?
如上所述,由于返回值优化,编译器通常不会在doSmith
的堆栈帧中创建此对象。此外,即使它是在doSmith
的堆栈框架中创建的,默认复制构造函数和默认分配运算符的行为也是如此:
如果子对象是数组,则以适合元素类型的方式分配每个元素
参见15.8.1 [class.copy.ctor] 14.1和15.8.2 [class.copy.Assign] 12.2
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++ 双向链表:使用矩阵类成员创建和填充列表
- C++创建对象数组
- 使用 back_inserter 从结构的单个成员创建向量
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- 为类的成员创建别名
- 使用各种数据类型成员创建对象的简便方法
- C 用数组作为成员创建对象
- 在成员函数中创建对象
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 如何全局创建对象并使用该对象访问全局范围内的公共成员函数
- 如何为指针成员创建对象
- 创建对象时初始化的类中的成员值
- c++成员初始化列表/在类中创建对象
- 需要帮助在类中创建对象,并为成员函数赋值