`
happmaoo
  • 浏览: 4474700 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C++标准库auto_ptr指针的应用

 
阅读更多

在进行学习windows编程的时候,要使用大量的API和消息对控件进行操作,虽然很烦乱,但是对于学习和研究还是很有用处的。

虽然以前学了一点的MFC,但是对于MFC的使用其实是一知半解,也没有入门。

现在重新使用C++的方法进行SDK的封装学习,对于自己是一个很好的兴趣点。

之前,一直没有好好学下C++,感觉好像用不到。因为在MFC中,放一个按钮,双击一下,一个函数自动生成了。

我感觉这样的方法对我的学习没有好处。

还是从基础的SDK进行学习吧,将学到的C++知识用起来。

今天封装了几个很常的控件类:

TButton

TEdit

TListBox

TCombox;

将这些常用控件按照MFC的格式全部封装,在写程序时方便多了。不用老是查找MSDN说明,省了不少事。

问题出现了。我在TForm窗口中有很多的控件成员类

这么多的控件成员,我要在函数中进行初始化,例:

窗口退出时,还要进行一个消毁内存的操作,

要写这么多的代码,我感觉自己好业余啊。我很担心,要是中途出错了。我的OnUnInitalize函数没有执行,omg,什么破程序啊。发现这个问题,我感觉好郁闷啊。异常也知道如何处理,我感觉能捕获的异常,我没有必要捕获了,我要捕获的是那种不能捕获的异常,比如buff溢出之类,内存越界之类的事情。现在弄得异常处理都不想去学了。 百无聊懒,在看书的过程中发现<c++标准库>中有一个好东西, auto_ptr,只是神助也,有了这个东西,我不可以不用多写一堆的代码删除new出来的指针了。将原来的TButton* chkTest;这样的定义改成auto_ptr<TButton> cmdTest类型,在类消毁的时候,这个指针对应的东西也会消毁掉吧?修改后的初始化函数,

问题又来了,本打算auto_ptr<TButton>cmdTest (new TButton(_hwnd,IDCANCEL));直接定义我的按钮指针,事于愿反,发现只要离开这个函数,我的cmdTest指针也消毁掉了。这也太不智能了。只好弄个临时变量转存一下。至少,有了这一招,我不用去delete我的成员对象了。实例化函数,还要改进,还没有想到好的办法,总觉得写这么一大堆的代码,太业余了。。。。郁闷,刚刚接触auto_ptr,还不知道如何用。郁闷中。。。

。。。。原来是书没有看完,就上马了。这下知道如何定义一个auto_ptr后进行赋值了。

例:auto_ptr(TButton)ptrButtonOk;

ptrButtonOk = auto_ptr(TButton)(new TButton(_hwnd,IDC_BUTTON1));//这样就可以正确赋值。不用临时转存了。


好东西,写在这里备忘,好好掌握,临活运用。C++STL还有很多的好东西等着我呢。


分享到:
评论

相关推荐

    auto_ptr指针介绍(智能指针).

    `auto_ptr`是C++标准库的一部分,并在C++11之前被广泛使用。尽管在C++11及以后版本中引入了更强大的智能指针如`unique_ptr`和`shared_ptr`,但了解`auto_ptr`的基本概念和用法对于理解智能指针仍然非常重要。 #### ...

    c++的智能指针Auto_PTR的细致而经典的分析

    本文主要围绕 C++ 标准库中的 `auto_ptr` 进行深入探讨,分析其内部实现机制及应用场景。 #### 二、Auto_PTR 简介 ##### 2.1 动态内存管理问题 在 C++ 中,动态内存的分配与释放往往成为开发者需要特别关注的问题...

    C++中的auto_ptr智能指针的作用及使用方法详解

    C++中的`auto_ptr`是旧版C++标准库中的一种智能指针,它主要用于管理动态分配的内存,确保在适当的时候自动释放内存,从而防止内存泄漏。在C++11之后,`auto_ptr`已被`unique_ptr`取代,因为`auto_ptr`有一些限制和...

    auto_ptr再回忆

    `auto_ptr`是C++标准库中的一个智能指针类,用于自动管理动态分配的资源,当`auto_ptr`对象超出作用域或被销毁时,它会自动释放所指向的对象。然而,`auto_ptr`的设计也存在一些缺陷,尤其是在拷贝和赋值操作上,...

    自己实现的auto_ptr

    标题中的“自己实现的auto_ptr”指的是用户自行编写的一个智能指针类,模仿了C++标准库中的`std::auto_ptr`。`std::auto_ptr`是C++标准库中的一个智能指针,用于管理动态分配的对象,它会在适当的时候自动删除所指向...

    C++中auto_ptr智能指针的用法详解

    其中,`auto_ptr`是C++98标准库中提供的一个智能指针类型,但在C++11及更高版本中已被推荐弃用,取而代之的是`unique_ptr`。尽管如此,理解`auto_ptr`的工作原理仍然是学习C++历史和理解智能指针概念的重要部分。 `...

    C++中的智能指针(auto_ptr)

    实际上auto_ptr 仅仅是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势。使用它不必每次都手动调用delete去释放内存。当然有利也有弊,也不是全然完美的。  本文从以下的8个方面来总结...

    C++STL中智能指针介绍

    `unique_ptr`是`auto_ptr`的替代品,它改进了所有权转移的语义,更安全且符合C++11标准。与`auto_ptr`相比,`unique_ptr`不支持拷贝构造和赋值,但支持移动构造和移动赋值。`unique_ptr`同样具有独占所有权。 3. `...

    boost-STL.rar_Boost_C++标准库_STL_c 标准库_chm

    《深入探索Boost.STL:C++标准库与STL的强化》 Boost.STL是Boost库的一个重要组成部分,它是对C++标准库STL(Standard Template Library)的扩展和增强,旨在提供更高效、功能更丰富的容器、迭代器、算法和函数对象...

    05_请说一下你理解的 C++ 中的四个智能指针1

    C++标准库提供了四种类型的智能指针,分别是`auto_ptr`(已被弃用),`unique_ptr`,`shared_ptr`和`weak_ptr`。 1. `auto_ptr`: `auto_ptr`是C++98引入的,但在C++11中被弃用,因为它存在安全性问题。`auto_ptr`...

    c++11智能指针解析——揭开底层面纱,完整理解智能指针.pdf

    `auto_ptr`是C++98标准库中的一个智能指针,它使用模板定义,可以自动删除所指向的对象。`auto_ptr`的主要问题在于其不安全的复制行为,因为当一个`auto_ptr`被赋值给另一个`auto_ptr`时,原始指针失去对其指向对象...

    智能指针的各种实现方法

    在C++标准库(STL)以及Boost库中,提供了多种智能指针的实现方式,每种都有其特定的应用场景和优势。 ### STL中的智能指针 #### `std::auto_ptr`(已被弃用) 在C++11之前,`std::auto_ptr`是STL中唯一可用的...

    C++智能指针详解.pdf

    C++智能指针是C++标准库中用于自动管理动态分配内存的对象,它们的主要目标是解决C++中手动内存管理的挑战,特别是防止内存泄漏。智能指针在生命周期结束时会自动调用删除器(deleter)来释放其所指向的对象,确保...

    C++智能指针详解(1).pdf

    C++智能指针是C++标准库提供的一种自动内存管理机制,主要用来解决手动管理动态内存时可能出现的问题,如内存泄漏和悬挂指针。智能指针的行为类似于普通指针,但具备自动释放所指向对象的功能,从而提高了代码的可靠...

    C++智能指针:shared-ptr用法详解.pdf

    `shared_ptr`是C++标准库中的一个关键组件,它解决了传统裸指针可能导致的内存泄漏问题。通过使用`shared_ptr`,程序员无需手动调用`delete`来释放内存,因为它会在适当的时候自动执行。 **1. 基本用法** `shared_...

    C++智能指针(含内存计数)

    C++标准库提供了几种不同类型的智能指针,包括`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`。这些智能指针各有特点,适用于不同的场景。 1. `std::unique_ptr`:这是独占所有权的智能指针,确保了任何...

    智能指针实现

    在C++标准库中,`auto_ptr`是最早的智能指针实现之一,但在C++11及更高版本中,推荐使用`unique_ptr`、`shared_ptr`和`weak_ptr`等更安全的智能指针类型。 `auto_ptr`的实现原理主要是利用了C++的析构函数机制。当`...

Global site tag (gtag.js) - Google Analytics