`
fourfire
  • 浏览: 415330 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C++指针容易出现的小错误

    博客分类:
  • C
阅读更多
一、定义
class C
{
    public:
    std::string name;
};
//正确,用指针指向一个对象
    C *cc=new C();
    cc->name="ddd";
    std::cout<<(cc->name)<<std::endl;
    //正确,不用指针,默认调用类的构造器
    C dd;
    dd.name="ddd";
    std::cout<<(dd.name)<<std::endl;
    //错误 指针所指的没有对象
    C *ee;
    ee->name="ddd";//出现错误
    std::cout<<(ee->name)<<std::endl;
二、参数传递
当方法的形参采用对象值,而非指针时,对象将自动调用构造函数,创建新的对象,
也就是专递的参数在方法内是另一个对象。
如:
void printMyName(Item_Base b)
        {
           b.name="kkk";
            std::cout<<b.name<<std::endl;
        };

Item_Base e;
    e.name="eee";
    std::cout<<e.name<<std::endl;//eee
    c->printMyName(e);//kkk
    std::cout<<e.name<<std::endl;//eee
而采用指针传递,则就是一个对象进行操作
如:
void printMyName(Item_Base *b)
        {
           
            b->name="lisi";
            std::cout<<b->name<<std::endl;
        };
Item_Base *c=new Item_A();
    //对象需通过指针传递,从而保证对象的唯一性
    c->name="zhangsan";
    std::cout<<c->name<<std::endl;//zhangsan
    c->printMyName(c);//lisi
    std::cout<<c->name<<std::endl;//lisi

因此,一般情况下,对象的传递采用指针传递。如果你设计的对象在别人使用时,只允许指针传递,不允许传递时创建副本。可以定义自己的复制构造函数,不允许外部调用,从而解决这个问题。ifstream就是这样设计的。
如:
protected:
        Item_Base(const Item_Base&){};//复制构造器为protected/private
这样编译时会出错
Item_Base e;
    e.name="eee";
    std::cout<<e.name<<std::endl;
    c->printMyName(e);//编译错误
    std::cout<<e.name<<std::endl;
分享到:
评论

相关推荐

    C++指针与引用的区别

    C++指针与引用的区别 指针和引用是C++语言中两种不同的概念,初学者容易把它们混淆一起。这两种概念都是地址的概念,但它们有很多不同的特点和应用场景。 相同点 1. 都是地址的概念;指针指向一块内存,它的内容...

    C++指针详细解析——史上最精彩指针文章

    指针的灵活性和功能强大,但也容易引起错误,因此,正确理解和使用指针是每个C++程序员必须掌握的技能。 ### 指针的四个方面 - **指针的类型**:指针的类型决定了指针本身的数据类型,可以通过去掉指针声明语句中...

    C++指针详解

    从给定的文件标题“C++指针详解”和描述“关于C++中指针的详细解释,写的很好有助于理解”,以及部分展示的内容来看,本文旨在深入探讨C++语言中的指针概念及其与数组的关系,尤其关注于指针的声明、初始化、赋值...

    C++指针应用的四大误区

    通过上述分析可以看出,C++指针的应用虽然强大但也容易出错。为了避免这些常见的误区,开发者需要深入理解指针的工作原理,并遵循最佳实践。通过仔细检查代码、使用智能指针等现代C++特性,可以有效地减少这些问题的...

    C++指针与内存管理.doc

    在C++编程中,内存管理和指针的使用是至关重要的,因为它们直接影响程序的稳定性和...通过理解这些基本概念和注意事项,开发者能够更好地掌握C++中的指针操作和内存管理,避免常见的内存错误,提升代码质量和稳定性。

    c和c++指针 适合C/C++初学者

    概或了C和C++指针的常用方法,及讲解了C和C++的用法还有一些使用C和C++时比较容易出现错误的地方毒皮分析

    C++程序员容易犯的十个C#错误

    C++程序员容易犯的十个C#错误 C++程序员在转换到C#时,经常会遇到一些错误。本文将讨论C++程序员最容易犯的十个错误,帮助C++程序员更好地理解C#语言和.NET Framework。 错误1:析构函数上的差异 C++程序员在使用...

    C++指针与动态分配内存new关键字专题

    在C++中,指针是一种基础的数据类型,它存储的是其他变量或函数的内存地址。...然而,指针的使用也相对复杂,容易出现错误,因此在使用时需要格外小心,避免常见的指针错误,如野指针、空指针引用等。

    C_C++指针经验总结文档

    最后,虽然指针强大且灵活,但也容易引发错误,如空指针引用、野指针、内存泄漏等。因此,使用指针时必须谨慎,确保始终知道指针指向哪里,并在不再需要时释放内存。 总的来说,深入理解C/C++指针不仅涉及基本概念...

    C++ 常见99个错误

    这只是C++中可能出现错误的一部分,通过学习"《C++ 常见99个错误》",你可以更深入地了解这些问题,从而写出更健壮、更高效的代码。这份资料将引导你避免这些常见的编程陷阱,提升编程技能,让你在C++的世界中...

    C_C++指针经验总结

    然而,由于指针的灵活性和强大功能,也使得它容易引发一些常见的错误,如野指针、空指针解引用、悬垂指针等。因此,熟练掌握指针的同时,也需要注重代码的安全性和健壮性,避免这些潜在的陷阱。

    C++常见错误及解决方案,c++报错,C,C++

    8. **模板和STL错误**:模板和标准模板库(STL)是C++的重要特性,但也容易出错,如模板类型推导错误、容器操作不当等。熟悉模板的工作原理和STL容器的使用规范能避免很多问题。 9. **多线程问题**:多线程编程中,...

    C++中二维数组与指针关系的剖析.pdf

    在C++编程语言中,二维数组与指针的关系一直是学习和教学中的关键概念,同时也是容易引发混淆的领域。本文将基于《C++中二维数组与指针关系的剖析》一文的核心观点,深入探讨二维数组与指针之间的内在联系及其在实际...

    C 指针 C++ 最权威资料 稿件 代码 容易犯错的地方

    本文将深入探讨 C 和 C++ 中的指针,以及容易出错的地方。 首先,我们需要理解什么是指针。在 C 和 C++ 中,指针是一个变量,它存储了另一个变量的内存地址。通过指针,我们可以间接地访问和修改存储在特定地址的值...

    C++ 智能指针实现

    在C++编程语言中,动态内存管理是一项复杂且容易出错的任务,这往往是导致运行时错误的主要原因之一。错误类型多样,包括但不限于内存泄漏、过早释放以及内存碎片化问题。其中,内存泄漏是最常见的错误之一,当程序...

    黄邦勇帅C++专题讲解

    介绍:本文辑是对C++中的部分难点专题进行分章的专门讲解,不是一套完整的教材,但可以做为学习C++的参考,这些专题本人都对C++中难于理解的难点作了重点讲解,并举了实际例子,以及一些容易理解错误的示例。 C++指针与...

    C++99个常见错误.pdf

    根据给定文件的部分内容,我们可以深入探讨C++编程中常见的99个错误,这些错误涵盖了基础问题、语法问题、预处理器问题、类型转换问题、初始化问题以及内存和资源管理问题等多个方面。以下是对部分错误的详细说明: ...

    C++语言: 99个常见编程错误

    ### C++语言:99个常见编程错误 #### 前言 《C++ Gotchas: Avoiding Common Problems in Coding and Design》是一本由Stephen C. Dewhurst编写的书籍,该书于2002年11月29日由Addison Wesley出版社出版。全书共352...

    数组与指针的艺术.doc

    然而,由于其特殊的使用方式,数组和指针常常引发误解,甚至出现了避免使用指针的倾向,作者认为这是对C/C++潜力的浪费。 指针是C/C++中的关键元素,它可以提供对内存地址的直接访问,实现高效的数据操作。然而,...

Global site tag (gtag.js) - Google Analytics