首先,我想通知你,我一直在寻找关于我的下一个问题的答案,但我是一个C++的新手.
我来自C#和Java的奢侈生活,现在正试图收集关于c ++的一两件事
问题是关于实例化.
我使用code :: block作为我的首选IDE.
目前我只是在玩C#中的内容(我实际上非常熟悉并且编写过多个应用程序)
2节课
包含main和Person的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models.Person;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person person = new Person();
Console.WriteLine(person.getName());
}
}
}
Run Code Online (Sandbox Code Playgroud)
和人类:
namespace ConsoleApplication1
{
public class Person{
private string name = "Bob";
public string getName(){
return name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
(不介意错误或正确的书面语法,它只是为了模拟我想要实现的目标)
我想在C++中实现相同的目标
我查了一下,并在某种程度上了解了标题,并选择了一些语法.这就是我现在所拥有的.
main.cpp中
#include <iostream>
using namespace std;
int main()
{
Person person;
cout << person->getName() << endl;
}
Run Code Online (Sandbox Code Playgroud)
Person.h
#ifndef PERSON_H
#define PERSON_H
#include <string>
class Person
{
public:
Person();
virtual ~Person();
std::string getName();
protected:
private:
};
#endif // PERSON_H
Run Code Online (Sandbox Code Playgroud)
player.cpp
#include "Person.h"
#include <string>
using std::string;
Person::Person()
{
//ctor
}
Person::~Person()
{
}
string Person::getName()
{
return name;
}
Run Code Online (Sandbox Code Playgroud)
考虑到上面的代码,我有很多问题.
我从来没有找到一个很好的来源,告诉我是否应该使用Person person;或实例化Person person = new Person();
我应该使用哪一个?
另一个我渴望的问题是,我是否在头文件或类文件中定义类成员?
目前我收到以下错误:
'人'未在范围内宣布并且预期';' 在人之前
我不是故意要求你解决我的错误,我会在收到问题的答案后管理.
正如拉斯曼斯所说,Person person和Person *person = new Person()导致新Person实例分别分配在堆栈/堆中。
这对您意味着什么(这是“我应该使用哪个?”问题的答案)是,在第一种情况下,对象的内存是自动管理的(这是好消息)。坏消息是对象的生命周期也是自动管理的,并且您无法对其进行任何控制。一旦person变量超出范围,该对象就会被销毁。时期。
在第二种情况 ( new) 中,对象的生命周期由您管理(它将一直存在,直到您管理delete person)。这里的坏消息是内存也由您管理:如果您不这样做delete person,分配给该对象的内存将会泄漏。如果您不再引用范围内的任何地方,那不会有任何区别person。
因此,如果生命周期对您来说足够长,请不要使用指针。否则,你将不得不这样做。
对于班级成员:
一般来说,定义应该放在.cpp文件中,但如果您在标头中定义非常短的方法也没关系。
附录
当然,在这个简短的回答中,还有很多细节我没有提及。以下是您可能需要研究的一些重要内容:
new/delete来管理内存除了内存泄漏之外还会产生很多其他问题;悬空指针(指向已被释放的内存,因此不能再使用——这本质上是内存泄漏的“反向”错误)可能是列表中的#2。IDisposable) 来模拟它。您可以在 C++0x 和 Boost 中使用非常好的、成熟的智能指针。a占用了 2MB 内存,而您这样做了b = a,您只需让编译器用 的副本填充全新的 2MB 内存a(并且可能需要做很多额外的工作来实现这一点)。如果这不是您的意图,您需要存储一个指针或引用a。| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |