🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #5189

Re: case x: ..=new

#5189
From: Piotr Piatkowski
Date: Mon, 15 Mar 1999 09:35
47 lines
2024 bytes
Michał Kudła <miko@student.man.radom.pl> wrote:

> int main()
> {
>     char *napis = "Michał";
>     int i = 5;
>     switch (i)
>     {
>         case 1:
>             str1 *s = new str1;
>             cout << napis;
>             break;
>         case 5:
>             cout << "ekstra";
>             break;
>     }
> }

> generuje coś takiego

> tswitch.cpp: In function `int main()':
> tswitch.cpp:17: jump to case label
> tswitch.cpp:14:   crosses initialization of `struct str1 * s'

Po prostu w obrębie switch'a nie wolno deklarować zmiennych, bo skacząc
do dalszej etykiety pomijasz jej inicjalizację a potem mógłbyś się
do niej odwołać. O ile w powyższym przypadku nie byłby to duży problem
o tyle w przypadku inicjalizacji obiektów z konstruktorem jest to już
faktycznie niebezpieczne, bo odwołujesz się do obiektu dla którego nie
wykonano konstruktora.

Najprościej to ominąć tak:

  case 1: {
    str1 *s = new str1;
    cout << napis;
    break;
  }
  case 5: 
   // ...

P.S. Nie chodzi tutaj wcale o wystąpienie bądź nie konstrukcji "new",
taki sam efekt byłby gdybyś napisał po prostu "str1 *s;" (w tym wypadku
komunikat kompilatora faktycznie może być mylący).

-- 
Piotr Piątkowski, Kraków
Technical Details
Message-ID: <7cik91$57h$2@druid.ceti.com.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!news.astercity.net!news.icm.edu.pl!news.ceti.com.pl!not-for-mail
References: <Pine.LNX.3.96.990315111232.13615C-100000@student.man.radom.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!news.astercity.net!news.icm.edu.pl!news.ceti.com.pl!not-for-mail
From: Piotr Piatkowski <kompas@ceti.com.pl>
Newsgroups: pl.comp.objects
Subject: Re: case x: ..=new
Supersedes: <7cik5i$57h$1@druid.ceti.com.pl>
Date: 15 Mar 1999 09:35:29 GMT
Organization: CETI internet access, Krakow
Lines: 47
Message-ID: <7cik91$57h$2@druid.ceti.com.pl>
References: <Pine.LNX.3.96.990315111232.13615C-100000@student.man.radom.pl>
NNTP-Posting-Host: tau.ceti.com.pl
Mime-Version: 1.0
User-Agent: tin/pre-1.4-981002 ("Phobia") (UNIX) (Linux/2.1.126 (i686))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit