Click here to Skip to main content
Click here to Skip to main content

ISArray

, 9 May 2000
Rate this:
Please Sign up or sign in to vote.
A simple templated array class.
<!-- Link to source file download -->
  • Download source files - 2 Kb
  • <!-- Add the rest of your HTML here -->

    Introduction

    ISArray is a simple array class template. It is especially useful when you need to dynamically allocate arrays of objects in functions that have many possible return points. Instead of having to call delete [] pArray at each return point, you can let the ISArray destructor handle it for you.

    Example

    int MyFunction()
    {
        // declare an array of 256 chars called "charArray"
        ISArray < char > charArray(256);
    
        // init to 0's
        charArray.Fill( (char)0 );
    
        // get a pointer to the start of the array
        char *pArray = (char *)charArray;
    
        // lots of ugly code with lots of ways out...
        if (...)
        {
            for (...)
            {
               if (...)
               {
                  // error!
                  return -1;
               }
            }
    
            if (...)
            {
               // error!
               return -2;
            }
            else
            {  
               // no error
               return 1;
            }
        }
    
        return 1;
    }
    

    If you had allocated the array the traditional C++ way, with

    char *pArray = new char[256];

    or the traditional C way, using

    pArray = (char *)malloc(256);

    you would have had to call delete [] pArray; or free(pArray) at each return point. But, with ISArray, the ISArray destructor handles this for you. This insures against memory leaks, and makes your code much cleaner to look at. In extreme cases (such as the one we wrote it for) this class can actually cut down the size of your app, by eliminating all of the clean-up code.

    In addition, ISArray allows you to delay the allocation of the memory, instead of doing it in the ISArray constructor. This can be very handy if the allocation is conditional. Of course, you don't have to test that the array has been allocated before deleting it, the ISArray destructor handles this for you, too.

    We've also included some handy utility functions to copy one array to another, set/get the array size, etc..

    Usage

    // include the header
    #include <span class="code-string">"ISArray.h"
    </span>
    
    void func()
    {
        // declare an array - allocate in the ctor
        ISArray <CString> stringArray(100);
    
        // declare some arrays - allocate later
        ISArray <BYTE> bytes1;
        ISArray <BYTE> bytes2;
    
        // allocate now
        bytes1.SetSize(1000);
        bytes1.Fill(0);
       
        // copy
        bytes2 = bytes1;
    }
    

    Remember - have fun.

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    About the Author

    Chris Losinger
    Software Developer
    United States United States
    Chris Losinger is the president of Smaller Animals Software, Inc..

    Comments and Discussions

     
    Questionabout GetPtr() ? PinmemberHunt Chang31-Dec-06 19:22 
    AnswerRe: about GetPtr() ? PinmemberChris Losinger1-Jan-07 6:20 
    GeneralRe: about GetPtr() ? PinmemberHunt Chang2-Jan-07 5:47 
    GeneralIssue about the Fill() function PinmemberChristian Skovdal Andersen5-Jun-01 11:57 
    GeneralRe: Issue about the Fill() function PinmemberChris Losinger13-Jun-01 8:24 
    GeneralUseful, but std::vector will work to PinsussWilliam Kempf3-May-00 12:17 
    GeneralRe: Useful, but std::vector will work to PinsussChris Losinger3-May-00 12:28 
    GeneralRe: Useful, but std::vector will work to PinsussWilliam Kempf10-May-00 4:19 
    GeneralRe: Useful, but std::vector will work to Pinsusschris losinger10-May-00 4:49 
    GeneralRe: Useful, but std::vector will work to PinsussWilliam Kempf10-May-00 12:52 
    GeneralRe: Useful, but std::vector will work to Pinsusschris losinger10-May-00 15:00 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    | Advertise | Privacy | Mobile
    Web02 | 2.8.140709.1 | Last Updated 10 May 2000
    Article Copyright 2000 by Chris Losinger
    Everything else Copyright © CodeProject, 1999-2014
    Terms of Service
    Layout: fixed | fluid