- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
最近我重新开始使用 C++ 编程,并且在编程其他东西时遇到了一些有趣的事情。
在下面的代码中,我定义了一个带有指针成员的类,该成员在类的析构函数中被删除。
我还定义了一个将 Test_Object 对象作为参数的函数,该函数调用 get_val() 方法之一,该方法仅报告指针指向的内存地址中保存的值。
现在,当我两次调用该函数时,它会正确打印一次内部指针保存的值,然后在第二次之后进行核心转储。
如果我错了,请纠正我,但我相信发生这种情况的原因是因为在第一次调用函数后,对象的析构函数被调用,因为对象已经超出范围并且基本上被销毁了。
我能想到的防止这种情况的唯一方法是通过引用传递对象。有没有其他方法可以防止这种情况发生?简单地通过引用传递对象似乎有点危险,因为可以在该函数调用中修改对象,这可能会在以后导致头痛。
我试过使参数为 const,但是我收到一条错误消息,指出“const Test_Object”作为“void Test_Object::get_val()”的“this”参数丢弃了限定符 argument.get_val();
#include <iostream>
using namespace std;
class Test_Object
{
private:
int *internal_pointer;
public:
Test_Object(int value)
{
internal_pointer = new int;
*internal_pointer = value;
}
~Test_Object()
{
delete internal_pointer;
internal_pointer = NULL;
}
void get_val() { cout<<*internal_pointer<<endl; }
};
void test_outsider(Test_Object argument)
{
argument.get_val();
}
int main()
{
Test_Object test = Test_Object(4);
test_outsider(test);
test_outsider(test);
return 0;
}
最佳答案
首先,您应该阅读 the rule of three .
至于你的问题,这是因为对象被复制,并且由于你没有提供自己的复制构造函数,指针被“按原样”复制,留下多个拷贝指向相同的分配内存。当其中一个拷贝删除
析构函数中分配的内存时,所有拷贝的指针都将失效。
您可以通过实现复制构造函数和复制赋值运算符来解决该问题。
关于c++ - 将对象传递给函数、作用域和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484499/
我开始考虑在我 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
我是一名优秀的程序员,十分优秀!