在循环中创建和销毁一个对象
Create and destroy an object in a loop
我是 C++/stacko 的新手,主要想:
- 创建对象
- 为此读取大量数据
- 计算出该对象的分数后,将其打印出来
- 从内存中删除对象,因为每个对象都有很多变量属性
- 循环 1000 次
看起来很简单,但环顾四周后,我看到了有关析构函数的信息,但我不知道这是否是我要找的。
for(int i=0; i<1000; i++){
applicants object1;
object1.readin();
cout<<object1.calculate();
//How do I delete object1 and start again?
}
非常感谢您的帮助。我对这种语言几乎一无所知。另外,我什至需要对象吗?我很困惑
对象一在结束括号处超出范围时将被自动删除。你已经在做了。要小心,就好像你创建了一个指针,当它超出范围时它不会被破坏。但是您当前的代码运行良好。
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
没有必要删除object1。
对于循环的每次迭代,将创建一个新对象 object1(使用默认构造函数)并在 "cout" 语句后销毁。
你不需要调用object1
的析构函数,它会在循环体结束时调用。
从技术上讲,析构函数在声明对象的块的末尾(右大括号)调用。
这就是为什么右大括号 }
有时被戏称为 C++ 中最重要的语句。那个时候可能会发生很多事情。
然而,在构造函数或析构函数中进行实际计算通常被认为是不好的风格。您希望他们获得 "allocate" 和 "deallocate" 资源。阅读更多关于 RAII and the rule of five(或三个)的信息。
顺便说一句,如果发生 exception,throw
和匹配的 catch
之间的析构函数也会被触发。
请进一步了解 C++ containers. You probably want your applicants
class to use some. Maybe it should contain a field of some std::vector
type。
也学习C++11 (or C++14), not some older version of the standard. So use a recent compiler (e.g. GCC 4.9 at least, as g++
, or Clang/LLVM 3.5 at least, as clang++
) with the -std=c++11
option (don't forget to enable warnings with -Wall -Wextra
, debugging info with -g
for debugging with gdb
, but enable optimizations e.g. with -O2
at least, when benchmarking). Modern C++11 (or C++14) has several very important features (missing in previous standards) that are tremendously useful when programming in C++. You probably should also use make
(here I explain why), see e.g. this and others examples. See also valgrind.
我是 C++/stacko 的新手,主要想:
- 创建对象
- 为此读取大量数据
- 计算出该对象的分数后,将其打印出来
- 从内存中删除对象,因为每个对象都有很多变量属性
- 循环 1000 次
看起来很简单,但环顾四周后,我看到了有关析构函数的信息,但我不知道这是否是我要找的。
for(int i=0; i<1000; i++){
applicants object1;
object1.readin();
cout<<object1.calculate();
//How do I delete object1 and start again?
}
非常感谢您的帮助。我对这种语言几乎一无所知。另外,我什至需要对象吗?我很困惑
对象一在结束括号处超出范围时将被自动删除。你已经在做了。要小心,就好像你创建了一个指针,当它超出范围时它不会被破坏。但是您当前的代码运行良好。
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
没有必要删除object1。
对于循环的每次迭代,将创建一个新对象 object1(使用默认构造函数)并在 "cout" 语句后销毁。
你不需要调用object1
的析构函数,它会在循环体结束时调用。
从技术上讲,析构函数在声明对象的块的末尾(右大括号)调用。
这就是为什么右大括号 }
有时被戏称为 C++ 中最重要的语句。那个时候可能会发生很多事情。
然而,在构造函数或析构函数中进行实际计算通常被认为是不好的风格。您希望他们获得 "allocate" 和 "deallocate" 资源。阅读更多关于 RAII and the rule of five(或三个)的信息。
顺便说一句,如果发生 exception,throw
和匹配的 catch
之间的析构函数也会被触发。
请进一步了解 C++ containers. You probably want your applicants
class to use some. Maybe it should contain a field of some std::vector
type。
也学习C++11 (or C++14), not some older version of the standard. So use a recent compiler (e.g. GCC 4.9 at least, as g++
, or Clang/LLVM 3.5 at least, as clang++
) with the -std=c++11
option (don't forget to enable warnings with -Wall -Wextra
, debugging info with -g
for debugging with gdb
, but enable optimizations e.g. with -O2
at least, when benchmarking). Modern C++11 (or C++14) has several very important features (missing in previous standards) that are tremendously useful when programming in C++. You probably should also use make
(here I explain why), see e.g. this and others examples. See also valgrind.