ホームページ > バックエンド開発 > C#.Net チュートリアル > C++ における動的メモリ割り当てと名前空間の概要

C++ における動的メモリ割り当てと名前空間の概要

青灯夜游
リリース: 2019-03-28 13:15:16
転載
2344 人が閲覧しました

この記事の内容は、C における動的メモリ割り当てと名前空間を紹介するものであり、一定の参考価値があるので、困っている友人は参考にしていただければ幸いです。

1. C

# での動的メモリ割り当てnew キーワードを使用して動的メモリを適用します

●●C の動的メモリ アプリケーションは type に基づいています

#deleteキーはメモリ解放に使用されます

C 言語は実際には動的メモリ割り当てをサポートしていません。 malloc ライブラリ関数によって実装されます。ハードウェアによっては malloc をまったくサポートしていない可能性があります。また、C new は、サポートされているかどうかに関係なく、キーワードです。どのコンパイラでも使用されますが、どのハードウェア プラットフォームでも動的なメモリ割り当てが可能であり、これが本質的な違いです。

malloc は動的メモリ割り当てのバイトに基づいており、new は動的メモリ割り当てのタイプに基づいています

// 变量申请:
Type * pointer = new Type;    // 从堆空间获取一个新的Type类型的空间
// 使用和C语言一样
delete pointer;        // 这里指的是pointer所指向的那个元素的内存空间被释放

// 数组申请:
Type * pointer = new Type[N];    // N指数组大小,数组元素个数,并非字节数
// 
delete[] pointer;    // 数组的释放,需要在delete后面加[],和变量有区别
                    // delete[]  说明所要释放的指针是指向一片数组空间的,释放整个数组空间,如果用delete的话,pointer指向的是数组的首元素地址,释放的就是首元素的内存空间,其余元素的内存空间并没有释放,会造成内存泄漏
ログイン後にコピー
#include <stdio.h>

int main()
{
    int* p = new int;    
    
    *p = 5;
    *p = *p + 10;
    
    printf("p = %p\n", p);
    printf("*p = %d\n", *p);
    
    delete p;        // 指释放单个变量
    
    p = new int[10]; // p指向一片数组空间,
    // p所指向的内存空间,至少占用了40个字节,保证够用,可能分配得更多
    
    for(int i=0; i<10; i++)
    {
        p[i] = i + 1;
        
        printf("p[%d] = %d\n", i, p[i]);
    }
    
    delete[] p;    // 释放数组
    
    return 0;
}
ログイン後にコピー

の違いnew キーワードと malloc 関数:

newキーワードは C

●# の一部です##malloc は C ライブラリが提供する関数です

##new

特定の型の単位でメモリを割り当てます##malloc

Memoryバイト単位の割り当て

#● new単一型変数適用時に初期化可能

##●

mallocメモリを持たない 初期化の特徴

newキーワード初期化:

int*   pi = new int(1);
float* pf = new float(2.0f);
char*  pc = new char('c')l
ログイン後にコピー

2. C の名前空間

C 言語の場合

にはグローバル スコープが 1 つだけあります。 #C 言語のすべてのグローバル識別子は同じスコープを共有します#● 識別子間に競合がある可能性があります

命名は C で提案されました空間の概念

#● 名前空間グローバル スコープをさまざまな部分に分割します

#● 異なる名前空間の識別子は競合することなく同じ名前を持つことができます

#● 名前空間は相互にネストできます

#● グローバル スコープは次のとおりですデフォルトの名前空間とも呼ばれます

定義:

namespace Name
{
    namespace Internal
    {
        /* ... */
    }
    /* ... */
}
ログイン後にコピー
名前空間の使用

using namespace name;     // 使用整个命名空间
using name::variable;     // 使用命名空间中的变量
::variable;                // 使用默认命名空间中的变量
ログイン後にコピー
#include <stdio.h>

namespace First
{
    int i = 0;
}

namespace Second
{
    int i = 1;
    
    namespace Internal
    {
        struct P
        {
            int x;
            int y;
        };
    }
}

int main()
{
    using namespace First;
    using Second::Internal::P;
    
    printf("First::i = %d\n", i);
    printf("Second::i = %d\n", Second::i);
    
    P p = {2, 3};
    
    printf("p.x = %d\n", p.x);
    printf("p.y = %d\n", p.y);
    
    return 0;
}
ログイン後にコピー
名前空間は、グローバルな問題を解決します変数名の競合に関する問題

3. 概要

C には動的メモリ割り当て用の特別なキーワードが組み込まれています

C では動的メモリ割り当てを同時に初期化できます

C の動的メモリ割り当ては型に基づいていますC の名前空間の概念は、名前の競合問題を解決するために使用されます

関連する推奨ビデオ チュートリアル: 「

C チュートリアル##」 #"

以上がこの記事の全内容です。皆様の学習にお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がC++ における動的メモリ割り当てと名前空間の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート