几年后,我开始用C#和其他语言学习C ++。我遇到了类参数(构造函数,继承,复制等),并且试图编写错误的示例代码。下面是一个示例类(.h和.cpp):
#ifndef SAMPLE_H
#define SAMPLE_H
#include <iostream>
class Sample
{
public:
Sample();
//Sample(const Sample& s);
virtual ~Sample();
int *s_array;
protected:
private:
};
void print(const Sample *s);
#endif // SAMPLE_H
Sample::Sample()
{
std::cout<<"create sample\n";
s_array=new int[10];
std::cout<<"alloc memory 10 int array\n";
for(int i=0; i<10; ++i)
{
s_array[i]=i;
}
}
Sample::~Sample()
{
//dtor
std::cout<<"Dealloc memory 10 int array\n";
delete [] s_array;
std::cout<<"destroy sample\n";
}
void print(const Sample *s)
{
std::cout<<s<<" "<<s->s_array<<'\n';
for(int i=0; i<10; ++i)
{
std::cout<<s->s_array[i]<<" ";
}
std::cout<<"\n\n";
}
然后在主
#include <iostream>
#include "Sample.h"
using namespace std;
int main()
{
cout<<endl<<"Let's try the Copy const WRONG.... "<<endl;
Sample *s1=new Sample();
print(s1);
Sample s2(*s1);
cout<<endl<<"What is s2 ??? "<<endl;
print(&s2);
delete s1;
cout<<endl<<"What is s2 NOW after s1 delete??? "<<endl;
print(&s2);
return 0;
}
我想测试不要使用复制构造函数的危险,我希望在删除s1之后看到完全“脏”的数组(即10个随机值甚至崩溃) 这是我获得的输出(Win 10 pro,IDE CodeBlock,GNU Gcc编译器): 让我们尝试Copy const WRONG .... 创建样本 分配内存10 int数组 0x1ba110 0x1b6e48 0 1 2 3 4 5 6 7 8 9
什么是s2 ??? 0x6efdf0 0x1b6e48 0 1 2 3 4 5 6 7 8 9
取消分配内存10 int数组 销毁样品
删除s1之后,s2现在是什么???? 0x6efdf0 0x1b6e48 1812296 1769664 2 3 4 5 6 7 8 9
取消分配内存10 int数组 销毁样本
为什么s_array的仅前两项为“脏”,而其余8项为好?为什么删除对象s1不会释放s2指向的整个内存? 提前感谢 迭戈