- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个使用复制构造函数复制对象的程序。在复制构造函数中,我调用了构造函数来创建内存并复制内容。它在构造函数中成功完成,但在构造函数结束后立即调用析构函数,我得到了垃圾值。最后在主函数中,如果我试图破坏新创建的对象,程序就会崩溃。为什么会这样?
这是代码。
#include<iostream>
using namespace std;
class Test
{
public:
int a;
int *p;
Test(int a,int b,int c)
{
this->a=a;
p=new int[2];
p[0]=b;
p[1]=c;
cout<<"\n\n "<<this->a<<" "<<this->p[0]<<" "<<this->p[1];
}
Test(const Test &ob)
{
Test(ob.a,ob.p[0],ob.p[1]);
cout<<"\n\n "<<this->a<<" "<<this->p[0]<<" "<<this->p[1];
}
void print()
{
cout<<"\n\n\n "<<a<<" "<<p[0]<<" "<<p[1];
}
~Test()
{
cout<<"\n\n\n DESTRUCTOR CALLED "<<endl;
delete [] p;
}
};
int main()
{
Test *ob1=new Test(2,3,4);
cout<<"\n\n\n ob2: new object";
Test *ob2=new Test(*ob1);
cout<<"\n\n\n ob1";
(*ob1).print();
cout<<"\n\n\n ob2";
(*ob2).print();
delete ob1;
delete ob2;
return 1;
}
产生输出:
2 3 4
ob2: 新对象2 3 4
调用了析构函数
9968956 9968956 0
ob1
2 3 4
ob2
9968956 9968956 0
调用了析构函数
调用了析构函数
“然后程序停止工作,即崩溃”...
我明白在这种情况下会发生什么,但请解释一下为什么在删除对象 ob2 时程序在这种情况下崩溃。谢谢
最佳答案
复制构造函数确实什么都不做。 Test(ob.a,ob.p[0],ob.p[1]);
只是创建一个临时的 Test
,它将立即被销毁。 Test
的所有成员都没有被初始化。
你想要delegate constructor ,这是一个 C++11 特性。
Test(const Test &ob) : Test(ob.a, ob.p[0], ob.p[1])
{
cout<<"\n\n "<<this->a<<" "<<this->p[0]<<" "<<this->p[1];
}
关于c++ - 从复制构造函数调用构造函数时,它也会调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775889/
我开始考虑在我 future 的项目或重构中实现控制反转容器,我想知道在正确设计依赖项时哪些原则(除了 GoF 模式)可能需要牢记在心。假设我需要构建一个简单的控制台应用程序,如果它可以访问互联网,它
假设我有一个 RxC contingency table 。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 “主效应”以及列的
我正在尝试使用 DKMS 为正在运行的内核 (4.4) 构 build 备树覆盖。我天真的 Makefile 如下: PWD := $(shell pwd) dtbo-y += my-awsome-o
我有一个 sencha touch 项目。我是用 phonegap 2.9 构建的,并且可以正常工作 device.uuid 返回到设备 ID。当我尝试使用 3.1 device.uuid 构建时抛出
我在安装了 Xcode 4.5.1 的 Mt Lion 上运行。 默认情况下,当我构建并部署到 iOS 5.1 设备时,显示会在我旋转设备时旋转,但当我部署到 iOS 6 模拟器或运行 iOS 的 i
我正在尝试使用 Google Analytics Reporting API v4 构建多折线图。 一张图表,其中我按每天的 session 计数为每个设备(台式机/平板电脑/移动设备)设置了一条线。
我一生都无法使用 xcode 组织者“自动设备配置”中的“团队配置配置文件”在 xcode 4.0.1 中将我的应用程序构建到我的 iPad 上。 该应用程序完美地构建到模拟器,但当我构建到 iPad
我是一名优秀的程序员,十分优秀!