为什么要删除wchar_t指针崩溃?

时间:2018-01-08 13:23:35

标签: c++ winapi

我想知道WM_SETTEXT使用后wchar_t *指针会发生什么。

<mat-form-field>
    <input
      matInput
      formControlName="departure_airport"
      #el_departure_input
      class="[ flight-travel-form__airport__input ][ typography-sub-heading ]"
      value=""
      placeholder="Departure"
      [matAutocomplete]="auto"
    />
  </mat-form-field>

  <mat-autocomplete #auto="matAutocomplete">
    <mat-option *ngFor="let airport of active_search_suggestions$ | async" [value]="airport" class="ten-autocomplete">
      {{ airport.name.toLowerCase() }}
      <br>
      <span class="typography-small-text">{{ airport.iata_code }}</span>
      <div *ngIf="airport.object_type === 'airport_group'"> Any Airport</div>
    </mat-option>
  </mat-autocomplete>
</div>

为什么删除f; 崩溃?

1 个答案:

答案 0 :(得分:1)

您应该删除此声明:

delete f; // crashes

您通过在 undefined behavior - ed的指针上调用delete运算符导致new。您应该只delete new - ed和delete[]new[]编辑的内容。摘自 n4140 草案,段落 5.3.5.2

  

delete的操作数的值可以是空指针值,a   指向由前一个new-expression创建的非数组对象的指针,或   指向表示这种类的基类的子对象(1.8)的指针   对象(第10条)。如果不是,则行为未定义

请注意,在使用标准C ++时,您应该在使用指向字符串文字的指针时应用const限定符:

const wchar_t* f = L"test";

甚至更好地使用宽字符串:

std::wstring ws = L"test";