473,795 Members | 2,418 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

ctor exception question

I have a class foo whose ctor might throw an exception. When I create a foo
object using "foo* myfoo = new foo;", and the ctor throws an exception, do
I need to delete myfoo to free its memory?

Apr 15 '06 #1
7 1923
Thomas wrote:
I have a class foo whose ctor might throw an exception. When I create a foo
object using "foo* myfoo = new foo;", and the ctor throws an exception, do
I need to delete myfoo to free its memory?


The compiler will generate code that will deallocate the memory using
operator delete() if the constructor throws.

Apr 15 '06 #2

Thomas wrote:
I have a class foo whose ctor might throw an exception. When I create a foo
object using "foo* myfoo = new foo;", and the ctor throws an exception, do
I need to delete myfoo to free its memory?


No, see:
http://www.parashift.com/c++-faq-lit...html#faq-16.10

Abdo Haji-Ali
Programmer
In|Framez

Apr 15 '06 #3
bb
However, in the following code... how to ensure "classA* ca" memory is
not leaked?

#include <iostream>

class classA {
public:
classA() { std::cout << "classA ctor." << std::endl; }
~classA() { std::cout << "classA dtor." << std::endl; }
private:
};

class classB {
public:
classB() {
throw "oops";
std::cout << "classB ctor." << std::endl;
}
~classB() { std::cout << "classB dtor." << std::endl; }
private:
};

class classD {
public:
classD() : ca(new classA), cb(new classB) {
std::cout << "classD ctor." << std::endl;
}
~classD() {
std::cout << "classD dtor." << std::endl;
delete cb;
delete ca;
}
private:
classA* ca;
classB* cb;
};

int main(int argc, char** argv) {

classD cd;

// code continues...
// how to release "classA* ca" in classD object (in cd above)?
}

Apr 15 '06 #4

bb wrote:
However, in the following code... how to ensure "classA* ca" memory is
not leaked?


Use std::auto_ptr<> or one of the boost smart pointers rather than
plain pointers. When any part of construction throws, the destructors
of so far constracted members and base classes are called.

Apr 15 '06 #5
bb
Thanks Maxim. Thats a v.good idea and works.

Apr 16 '06 #6

bb wrote:
Thanks Maxim. Thats a v.good idea and works.


With a caveat: when using std::auto_ptr<> as a member don't forget to
disable copying by declaring the copy constructor and the assignment
operator non public or implement deep copy. Just declaring
std::auto_ptr<> member const prohibts copying as well.

Apr 16 '06 #7
bb
Thanks again Maxim. I do appreciate those important points.

Apr 16 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
2250
by: SteveK | last post by:
**Newbie with managed C++** I'm trying to wrap an unmanaged C++ class in a managed C++ class library. When I instantiate the wrapper class it's ctor calls the ctor on the unmanaged class and at that point I get the exception: "An unhandled exception of type 'System.StackOverflowException' occurred in suabwrapper.dll" I have been able to reproduce this with an unmanaged class that is VERY simple:
6
1403
by: Klaus Ahrens | last post by:
hi all, acoording to the c++ standard "15.3. - -10- Referring to any non-static member or base class of an object in the handler for a function-try-block of a constructor or destructor for that object results in undefined behavior." it is not allowed to refer to l (delete l;) in the following code
5
3033
by: PasalicZaharije | last post by:
Hallo, few days ago I see ctor like this: Ctor() try : v1(0) { // some code } catch(...) { // some code }
5
1623
by: Grahamo | last post by:
Hi, I have a basic question regarding some legacy code I'm working with; Basically the code looks something like this. I'd like to know if there are any reasons why a particular approach is taken. Given a type X we have a class something like this; class foo
6
2001
by: puzzlecracker | last post by:
When ctor throws an exception, dtor is not called for that object (correct me if I am wrong) - then how would already allocated memebers de-allocated? Thanks.
4
2012
by: ksukhonosenko | last post by:
This message was originally posted to comp.lang.c++.moderated ---------------------------------------------------------------------------------------------- Hi! I face a problem in my production code. I could deduce this problem to program shown below. It seems, that try-block in constructor doesnt work as it should (compared to case where no try block exists at all). I tested this small program on my MSVC .NET Pro 2003 (and separately...
8
2743
by: Grizlyk | last post by:
Good morning. Look here: http://groups.google.com/group/fido7.ru.cpp.chainik/browse_frm/thread/7341aba5238c0f79 and here: http://groups.google.com/group/fido7.ru.cpp.chainik/browse_frm/thread/cb014f4ba9df614a Can anybody answer? Who can't read in russian:
1
1846
by: njuneardave | last post by:
Hey, I'm having an emergency problem with my software and am under a very very tight deadline, so I thought I could post here as a last resort... I randomly get an exception pop up that gives me the following approximate stack trace: "Argument Exception: Invalid parameter used.
0
1017
by: subramanian100in | last post by:
Consider the following program: #include <cstdlib> #include <iostream> using namespace std; class Test { public:
0
9672
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9042
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7540
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6780
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5437
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5563
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4113
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3727
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2920
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.