Home » Interview Questions » Interviews » Story Details
Printable Version

Interview Question: disallow object of class on stack

by Kamal Rawat on Jan 01, 2012

Write a class such that no user should be able to create object of this class on stack. User should be able to create object on heap.
Comments: 0    Views: 651

MCN Professionals | Interview Question of the day

MCN Professionals is starting Industrial Training for MCA-2012 Batch. Have a look at our Industrial Training Program and Course Details.
-----------------------------------------------------------------------------------------------------------------------------------------

Today's Question:

Write a class such that user can create its object on heap (using new) but user should not be able to create its object on stack. So it the class is MyClass, then

MyClass stackObj;     // Should give compile time error.
MyClass *heapobj = new MyClass;      // This should be OK, & allowed.

Give the definition of the class (should you change the scope or anything else of constructor / destructor / assignment operator or any other function).

Solution:

If destructor of a class is declared as private inside the class, then user will not be able to create object of that class on stack.

class MyClass
{
    private:
        ~MyClass(){}
};

int main()
{
    MyClass obj; // ERROR
}

In the main function, when we try to create object of MyClass, obj will get created, but when the control will move out of main function, compiler will attempt to call the destructor. But since the destructor is declared private, it is not possible to call it from outside the class scope, Hence error.

The problem with our class definition is that it will not even allow the object creation on heap.

MyClass * ptr = new MyClass; // OK, because constructor (default) can be called from outside
delete ptr; // ERROR, for the same reason as above.

So we are not able to delete the object (if we don't delete, it will leave memory leaks, if we try to delete it will give compile-time error).

We can overcome this problem by allowing alternate way to the user to delete the object on heap. Lets define another public function, which will call the delete function, as shown below.

class MyClass
{
    public:
        deleteObj(){ delete this; } // Call this to delete object on heap.

    private:
        ~MyClass(){}
};


---------------------------------------------------------------------------

Interview Questions Archive:

         To see all the questions in the category click here...

Post a Comment
*
DevExpress PowerBuilder Web Development Windows Development Languages Software Engineering Databases
iPhone Architecture Secutiry UML & Modeling Operating Systems Networking Testing
Graphics Design Project Management Hardware Open Source Games Development Business Intelligence Visual Studio LightSwitch 2011
MonoDevelop Visual Studio 2010 ASP.NET HTML, DHTML XML PHP JavaScript
Silverlight Web Services WCF Windows Forms WPF Windows Services Dynamic Link Libraries
ActiveX COM, DCOM, ATL C# VB.NET C++ F# Java
Pascal SQL Server Oracle DB2 MS-Access Windows Servers Windows
Linux Unix SAP LINQ .NET Framework ADO.NET Reporting
Crystal Reports SQL Server Reporting Services Igenda Reports Active Reports Adobe Fireworks Arrays & Collections Hosting
Future Trends Android Windows Phone Smart Devices Business M&A Investment & Funding
Web Browsers Internet Explorer Firefox Safari Common Entrepreneurs Students
Consulting Wiki Gadgets MobileMe iCloud iOS Social Media
Facebook Twitter LinkedIn Google+ Microsoft Kinect XBox
Wii Playstation DirectX i OS OS X CIO, CTO, CEO Windows 8
Web Design Expression Blend 4 Photoshop CS5 Creative Suite 5.5 Expression Web 4 Expression Studio 4 Creative Suite® 5.5 Design
Creative Suite 5.5 Web Creative Suite 5.5 Production Startups Funding M&A Laptops Smart Phones
Desktops Cameras & Camcorders Netbooks Tablets Virtualization Microsoft Surface WordPress
Software Products Cloud Computing Current Affairs Technology TV TV
Earnings XAML E-Commerce MonoTouch Mono for Android Deals Electronics
Mobile Phone Laptop Tablet Book Computer Press Releases Reviews
Products Books Companies Windows Azure SQL Azure Interviews Mac
Web Browsers Symbian Windows Forms WPF Windows Services HTML 5 Office 365
SharePoint 2010 Exchange Server Adobe Visual Studio 2012 iPad Flex / Flash Games
Windows 9
X
 Login
Please login to submit a new post, reply and edit exiting posts, see user profiles, and access more features. If you are not a registered member, Register here.
User Id / Email:
Password:  
Forgot Password | Forgot UserName