在循环中创建和销毁对象

时间:2015-02-21 21:18:43

标签: c++ object

我是C ++ / stacko的新手,并且主要想要:

  1. 创建对象
  2. 读入大量数据
  3. 计算该对象的分数后,将其打印出来
  4. 从内存中删除对象,因为每个对象都有很多归因于它的变量
  5. 循环1000次
  6. 看起来很简单,但在环顾四周之后,我看到了关于析构函数的事情,但我不知道这是不是我要找的。

    for(int i=0; i<1000; i++){
        applicants object1;
        object1.readin();
        cout<<object1.calculate();
        //How do I delete object1 and start again?
    }
    

    非常感谢您的帮助。我对这种语言几乎一无所知。另外,我甚至需要物品吗?我很困惑

3 个答案:

答案 0 :(得分:3)

没有必要删除object1。

对于循环的每次迭代,将创建一个新的对象object1(使用默认构造函数)并在“cout”语句之后进行破坏。

答案 1 :(得分:3)

您不需要调用object1的析构函数,它将在循环体的末尾调用。

从技术上讲,在块的末尾(右大括号)调用析构函数来声明对象。

这就是为什么右括号}有时被戏称为C ++中最重要的陈述。当时可能会发生很多事情。

然而,在构造函数或析构函数中进行实际计算通常被认为是不好的样式。您希望它们“分配”和“释放”资源。详细了解RAIIrule of five(或三个)。

顺便说一句,如果exception发生,throw和匹配的catch之间的析构函数也会被触发。

请详细了解C ++ containers。您可能希望您的applicants课程使用某些课程。也许它应该包含一些std::vector type的字段。

同样学习C++11 (或C ++ 14),而不是标准的旧版本。因此,使用最近的编译器(例如GCC 4.9至少g++Clang/LLVM 3.5至少clang++} -std=c++11选项{don}不要忘记使用-Wall -Wextra启用警告,使用-g调试信息以便使用gdb进行调试,但是在进行基准测试时至少启用optimizations,例如-O2 Modern C ++ 11 (或C++14有几个非常重要的功能(以前的标准中缺少)非常有用 programming in C++。你可能也应该使用makehere我解释原因),参见例如this和其他例子。另请参阅valgrind

答案 2 :(得分:2)

当对象1超出末尾括号范围时,将自动删除对象。你已经在做了。要小心,就好像你创建一个指针,当它超出范围时不会被破坏。但是你当前的代码工作正常。

http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm