构造函数和复制构造函数

时间:2019-08-21 13:13:53

标签: c++11

几年后,我开始用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指向的整个内存? 提前感谢 迭戈

0 个答案:

没有答案