静态与动态内存分配的两个主要区别:
1、静态对象是有名字的变量,我们直接对其进行操作。而动态
对象是没有名字的变量,可通过指针间接地对它进行操作。
2、静态对象的分配与释放由编译器自动处理。动态对象的分配
与释放,必须由程序员显式地管理,由new和delete两个表达式
完成。
new的两个版本:
1、用于分配特定类型的单个对象。如:
int *point = new int ( 1024 );注:小括号
分配了一人没有名字的int 型对象,对象初始值为1024。
2、用于分配特定类型和维数的数组。如:
int *pia = new int[ 4 ]; 注:中括号
分配了一个含有四个整数元素的数组。
delete的两个版本:
1、删除单个对象
delete pint;
2、删除一个对象数组
delete [] pia;
文件的输入输出
#include <fstream>
为了打开一个仅被用于输出的文件(即写入),要先定义一个ofst
ream(输出文件流)类对象
如:ofstream outfile("copy.txt",ios_base::out);
传递给ofstream构造函数的实参分别指定了要打开的文件
名和打开模式。ofstream文件可以被打开为输出模式(ios_base:
:out)或附加模式(ios_base::app),在缺省情况下,ostream文件
以输出模式打开。
下面的定义与上面的等价:
ofstream outfile("copy.txt");
区别:
输了模式下打开已经存在的文件,则所有存储在该文件中的
数据都将被丢弃。
附加模式下打开已经存在的文件,则新写到文件中的数据是
增加到瑞有文件内容的尾部,而不会替换现有文件内容。
注:如果用这两种模式打开的文件不存在,则程序都会创建
一个新文件。
ifstream inFile;
inFile.open(filename.c_str());
如输出:
#include <fstream>
int main()
{
//打开文件copy.txt用于输出
ofstream outFile("copy.txt",ios_base::out);
if(!outFile)
{
cerr<<"Cannot open "copy.txt" for output/n";
return -1;
}
char ch;
while(cin.get(ch))
outFile.put(ch);
outFile.close();
}
如输入:
#include <fstream>
int main()
{
cout<<"用于输入的文件名:";
string file_name;
cin>>file_name;
//打开文件copy.txt用于输入
ifstream inFile(file_name.c_str());
if(!inFile) {
cerr<<"unable to open input file!/n";
return -1;
}
char ch;
while (inFile.get(ch))
cout.put(ch);
inFile.close();
}