Article View: pl.comp.objects
Article #5189Re: case x: ..=new
From: Piotr Piatkowski
Date: Mon, 15 Mar 1999 09:35
Date: Mon, 15 Mar 1999 09:35
47 lines
2024 bytes
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-mailReferences:
<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