Name

New Procedure

Syntax

procedure New(var P: Pointer-type);
procedure New(var P: ^object; Constructor);

Description

The New procedure allocates a new variable of pointer or old-style object type.

The most common case is setting a pointer variable to point to dynamically allocated memory. New calls GetMem to allocate the memory, and then it calls Initialize to initialize the strings, dynamic arrays, interfaces, or Variants in the new value. Note that other fields, such as scalar values, static arrays, and short strings, are not initialized.

You can also create an old style object by calling New. The first parameter is a pointer variable, and the optional second argument is the constructor name and its optional arguments. Delphi calls the constructor, allocates the memory for the object, initializes the memory to all zeros, and sets the pointer to refer to the newly allocated memory. New is not a real procedure.

Tips and Tricks

  • Unlike standard Pascal, Delphi Pascal uses a plain call to New to allocate a variant record. Do not supply values for the variant tags. New always allocates the maximum amount of memory needed for all combinations of variant tags.

  • If you need to allocate a variably sized array, use GetMem. If you need to allocate a single record or a fixed-size array, use New.

Example

type
  PEmployee = ^TEmployee;
  TEmployee = record
    Name: string;
    TIN: string[9];
    Salary: Currency;
  end;
var
  E: PEmployee;
begin
  New(E); try E.Salary := 0; // Initialize to zero until a proper value ...

Get Delphi in a Nutshell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.